VB.NETの ComboBox には枠線(ボーダー)を表示するプロパティが標準ではありません。
ComboBox の FlatStyle を Flat に設定すると、 枠線が白色になりよく見えなくなります。 そこで、 ComboBox の簡単な拡張クラスをとして枠線の色を追加のプロパティとして作成しました。
クラス名は名前は ComboBoxEx とします。
ウインドウメッセージの処理の中で、 WM_PAINT のメッセージの処理でコンボボックスコントロールの枠を描画します。 枠線を指定する為のプロパティを BorderColor として定義しています。
ComboBoxの簡単な拡張クラス
Imports System Imports System.ComponentModel Imports System.Drawing Imports System.Drawing.Drawing2D Imports System.Windows.Forms '''''' 拡張コンボボックスコントロール ''' '''Public Class ComboBoxEx Inherits System.Windows.Forms.ComboBox Private Const WM_PAINT As Integer = &HF ''' ''' コンストラクタ ''' Sub New() 'ComboBoxのコンストラクタを呼ぶ MyBase.New() End Sub '''''' Windowsメッセージ処理 ''' ''' Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) Select Case m.Msg Case WM_PAINT 'ペイントイベントでデフォルトの処理をさせる MyBase.WndProc(m) 'その後で強制的に枠描画 Call DrawRectangle() Case Else MyBase.WndProc(m) End Select End Sub '''''' 枠描画関数 ''' '''再定義可能関数 Protected Overridable Sub DrawRectangle() 'グラフィッククラスの参照取得 Dim g As Graphics = Me.CreateGraphics() '枠の四角い領域 Dim rect As Rectangle = Me.ClientRectangle '描画用のペン生成 Dim framePen As New Pen(Me.BorderColor) Try '枠描画 g.DrawRectangle(framePen, rect.X, rect.Y, rect.Width - 1, rect.Height - 1) Catch ex As Exception Finally 'ペンの解放 framePen.Dispose() End Try End Sub 'ボーダー色退避 Private _BorderColor As Color = System.Drawing.SystemColors.ControlText '''''' ボーダー色プロパティ ''' '''Color値 '''Color値 Public Property BorderColor() As Color Get Return Me._BorderColor End Get Set(ByVal value As Color) Me._BorderColor = value End Set End Property End Class
このクラスを clsComboBoxEx.vb の様な名前で保存し、一度コンパイルすると、ツールボックスの中に ComboBoxExが現れるので、それをフォームに貼り付けます。 フォームに張り付けた時のプロパティウインドウに BorderColor があることがわかります。
フォームにComboBoxExを2個貼り付け、それぞれのボーダーを赤と青に設定した例を示します。
関連する記事
⇒コンボボックスの基本的な使い方(項目に文字列のみを設定)⇒コンボボックスのItemsプロパティにクラスデータを設定する方法(コードと文字列をセットで設定)
PR
コメント