VB.NETで標準ラベルコントロールから派生した、背景色をグラデーション描画するGradientLabelコントロールを作成しました。
このコントロールには以下の追加プロパティが備わっています。
このGradientLabelコントロールのソースは以下の様になっています。
バックグラウンド描画イベント処理にてグラデーション用ブラシでグラデーションの色と位置を設定し、内部を描画します。 さらに、枠色で枠を描画しています。
このコントロールを使った例を以下に示します。
■GradientMode:Horizontal
左から右に向かってグラデーションされます。
BackColor⇒BackColor2の色変化のグラデーションです。
GradientCount=1の場合は、BackColor⇒BackColor2のみのグラデーションで
GradientCount=2の場合は、BackColor⇒BackColor2⇒BackColorのグラデーションとなります。
その後、GradientCountの値が増えるに従って、「BackColor2」「BackColor」が繰り返されます。
■GradientMode:Vertical
上から下に向かってグラデーションされます。
■GradientMode:ForwardDiagonal
左上から右下に向かってグラデーションされます。
■GradientMode:BackwardDiagonal
右上から左下に向かってグラデーションされます。
=====
2015/03/23:の時の情報
このコントロールには以下の追加プロパティが備わっています。
プロパティ | 概要 |
---|---|
BackColor2 |
グラデーション終了色 (デフォルトのBackColorからBackColor2への色の変化) |
FrameColor |
ラベルの枠色 |
GradientMode |
グラデーションの方向(LinearGradientMode) |
GradientCount |
グラデーションの回数 (回数は1から10に強制的におさえている) |
バックグラウンド描画イベント処理にてグラデーション用ブラシでグラデーションの色と位置を設定し、内部を描画します。 さらに、枠色で枠を描画しています。
Imports System.ComponentModel Imports System.Drawing.Drawing2D Public Class GradientLabel Inherits System.Windows.Forms.Label '''''' コンストラクタ ''' '''Public Sub New() MyBase.New() MyBase.BackColor = Color.Transparent Me._GradientMode = LinearGradientMode.Horizontal End Sub ''' ''' バックグラウンド描画イベント処理 ''' Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs) Dim g As Graphics = pevent.Graphics If Me.BackColor.A < 255 OrElse Me.BackColor2.A < 255 Then MyBase.OnPaintBackground(pevent) End If '描画領域 Dim rect As Rectangle = New Rectangle(0, 0, Me.Width, Me.Height) 'グラデーション用ブラシ Dim lgb As LinearGradientBrush = New LinearGradientBrush(rect, Color.Red, Color.Violet, Me._GradientMode) 'グラデーション用のColorBlendクラス Dim cb As ColorBlend = New ColorBlend() 'グラデーションの色と位置を設定 Dim arrColors(Me._GradientCount) As Color Dim arrPos(Me._GradientCount) As Single For i As Integer = 0 To _GradientCount If (i And 1) = 0 Then arrColors(i) = Me._BackColor Else arrColors(i) = Me._BackColor2 End If arrPos(i) = i / _GradientCount Next cb.Colors = arrColors cb.Positions = arrPos lgb.InterpolationColors = cb '複数の色による線形グラデーション定義 g.FillRectangle(lgb, rect) '描画 '枠を描画する(取敢えず線の幅は2) Using pen As New Pen(Me._FrameColor, 2) pen.DashStyle = Drawing2D.DashStyle.Solid g.DrawRectangle(pen, rect) End Using End Sub Private _BackColor As Color Public Shadows Property BackColor() As Color Get If Me._BackColor <> Color.Empty Then Return Me._BackColor End If If Me.Parent IsNot Nothing Then Return Me.Parent.BackColor End If Return Control.DefaultBackColor End Get Set(ByVal value As Color) Me._BackColor = value Me.Invalidate() '再描画 End Set End Property Private _BackColor2 As Color <Category("Display"), Description("グラデーション終了色")> _ Public Property BackColor2() As Color Get If Me._BackColor2 <> Color.Empty Then Return Me._BackColor2 End If If Me.Parent IsNot Nothing Then Return Me.Parent.BackColor End If Return Control.DefaultBackColor End Get Set(ByVal value As Color) Me._BackColor2 = value Me.Invalidate() '再描画 End Set End Property Private _FrameColor As Color = Color.Black <Category("Display"), Description("枠色")> _ Public Property FrameColor() As Color Get If Me._FrameColor <> Color.Empty Then Return Me._FrameColor End If Return Color.Black End Get Set(ByVal value As Color) Me._FrameColor = value Me.Invalidate() '再描画 End Set End Property Private _GradientMode As LinearGradientMode <Category("Display")> _ <DefaultValue(GetType(LinearGradientMode), "Horizontal"), Description("グラデーションの方向")> _ Public Property GradientMode() As LinearGradientMode Get Return Me._GradientMode End Get Set(ByVal value As LinearGradientMode) Me._GradientMode = value Me.Invalidate() '再描画 End Set End Property Private _GradientCount As Integer = 4 <Category("Display")> _ <DefaultValue(GetType(Integer), "4"), Description("グラデーションの回数")> _ Public Property GradientCount() As Integer Get Return Me._GradientCount End Get Set(ByVal value As Integer) If value < 1 Then value = 1 If value > 10 Then value = 10 Me._GradientCount = value Me.Invalidate() '再描画 End Set End Property End Class
このコントロールを使った例を以下に示します。
■GradientMode:Horizontal
左から右に向かってグラデーションされます。
BackColor⇒BackColor2の色変化のグラデーションです。
GradientCount=1の場合は、BackColor⇒BackColor2のみのグラデーションで
GradientCount=2の場合は、BackColor⇒BackColor2⇒BackColorのグラデーションとなります。
その後、GradientCountの値が増えるに従って、「BackColor2」「BackColor」が繰り返されます。
■GradientMode:Vertical
上から下に向かってグラデーションされます。
■GradientMode:ForwardDiagonal
左上から右下に向かってグラデーションされます。
■GradientMode:BackwardDiagonal
右上から左下に向かってグラデーションされます。
=====
2015/03/23:の時の情報
PR
コメント