列挙型をコンボボックスにバインドするには、BindingSourceクラスを使い、以下のようにします。
Public Class Form2
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'列挙型をコンボボックスにバインド
With Me.ComboBox1
Dim bs As New BindingSource
'データソースを自作のComboDataに指定する
bs.DataSource = GetType(ComboData)
'列挙型をループしてBindingSourceクラスに追加する
For Each s As String In [Enum].GetNames(GetType(DayOfWeek))
Dim obj As DayOfWeek = CType([Enum].Parse(GetType(DayOfWeek), s), DayOfWeek)
Dim data As New ComboData(CInt(obj), s)
bs.Add(data)
Next
'バインドする
.ValueMember = "Value"
.DisplayMember = "Display"
.DataSource = bs
End With
End Sub
End Class
''' <summary>
''' コンボボックスにバインドするデータ
''' </summary>
''' <remarks></remarks>
Public Class ComboData
Private mintValue As Integer
Public Property Value() As Integer
Get
Return mintValue
End Get
Set(ByVal value As Integer)
mintValue = value
End Set
End Property
Private mstrDisplay As String
Public Property Display() As String
Get
Return mstrDisplay
End Get
Set(ByVal value As String)
mstrDisplay = value
End Set
End Property
Sub New(ByVal vintValue As Integer, ByVal vstrDisplay As String)
Value = vintValue
Display = vstrDisplay
End Sub
End Class