フォームのバックグラウンドをグラデーションする方法

Cc440867.download(ja-jp,MSDN.10).gif サンプル コードのダウンロード (vbmigtips_Gradation.msi, 471 KB)

GotDotNet からダウンロードできる Visual Basic Power Pack には、BlendPanel コントロールというのがあります。このコントロールを使用すれば、簡単にグラデーションすることができます。しかし、BlendPanel コントロールをフォームに貼らなくてはなりません。そこで今回は、図1 のように、フォームを直接グラデーションする方法を紹介します。

 Cc440867.Gradation_fig01(ja-jp,MSDN.10).jpg
 図1

Visual Basic 6.0 では、グラデーションを行うためのメソッドなどがサポートされていなかったため、独自で描画する必要がありました。一方、Visual Basic .NET では、LinearGradientBrush クラスを使用することで、簡単に実装することができます。実装コードは以下のとおりです。

Dim mode As System.Drawing.Drawing2D.LinearGradientMode = Drawing2D.LinearGradientMode.Horizontal

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
DrawForm(e.Graphics, mode)
End Sub

Private Sub DrawForm(ByVal g As Graphics, ByVal mode As System.Drawing.Drawing2D.LinearGradientMode)
Try
Dim myLGBrush As System.Drawing.Drawing2D.LinearGradientBrush = New System.Drawing.Drawing2D.LinearGradientBrush(Me.ClientRectangle, Color.Blue, Color.White, mode)
g.FillRectangle(myLGBrush, Me.ClientRectangle)
Catch ex As Exception
End Try
End Sub

リスト1

リスト1 の「Dim mode As System.Drawing.Drawing2D.LinearGradientMode = Drawing2D.LinearGradientMode.Horizontal」でグラデーションする方向を「左から右 (Horizontal) 」に指定します。Form1_Paint イベントハンドラの「DrawForm(e.Graphics, mode)」では、DrawForm メソッドを使用してフォームにグラデーションイメージを描画します。DrawForm メソッドの「Dim myLGBrush As System.Drawing.Drawing2D.LinearGradientBrush = New System.Drawing.Drawing2D.LinearGradientBrush(Me.ClientRectangle, Color.Blue, Color.White, mode)」で、グラデーション ブラシを作成し、「g.FillRectangle(myLGBrush, Me.ClientRectangle)」でグラデーションした四角形の描画を行います。これにより、フォームのバッググラウンドがグラデーションされます。上記を実装し、実行すると、図1 のように表示されます。

上記では、グラデーションする方向を「左から右 (Horizontal) 」に指定しましたが、他にも「上から下 (Vertical) 」「右上から左下 (BackwardDiagonal) 」「左上から右下 (ForwardDiagonal) 」と方向を変更することができます。今回、メニューによってグラデーションする方向を変更できるようにします。実装コードは以下のとおりです。

Private Sub MenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click, MenuItem3.Click, MenuItem4.Click, MenuItem5.Click
Select Case CType(sender, RadioButton).TabIndex
Case 0
mode = Drawing2D.LinearGradientMode.Horizontal
Case 1
mode = Drawing2D.LinearGradientMode.Vertical
Case 2
mode = Drawing2D.LinearGradientMode.BackwardDiagonal
Case 3
mode = Drawing2D.LinearGradientMode.ForwardDiagonal
End Select
DrawForm(Me.CreateGraphics(), mode)
End Sub

リスト2

上記を実装し、[グラデーションの向き]メニューの[横]を選択すると、図1 のように左から右の方向にグラデーションされ、[縦]を選択すると、図2 のように、上から下の方向にグラデーションされます。

 Cc440867.Gradation_fig02(ja-jp,MSDN.10).jpg
 図2

[グラデーションの向き]メニューの[右上対角線]を選択すると、図3 のように、右上から左下の方向にグラデーションされます。

 Cc440867.Gradation_fig03(ja-jp,MSDN.10).jpg
 図3

[グラデーションの向き]メニューの[右下対角線]を選択すると、図4 のように、左上から右下の方向にグラデーションされます。

 Cc440867.Gradation_fig04(ja-jp,MSDN.10).jpg
 図4