2列の値を持つコンボボックス[コード+値]
コンボボックスで選択された値に対応する別の値を取得することができます。
例えば、表示は「部署名」取得する値は「部署コード」とすることができます。
実装例
「部署名」と「部署コード」を持つクラスを用意します。
Public Class Department
Protected m_strCode As String
Protected m_strDepartment As String
Public Sub New(ByVal strCode As String, ByVal strDepartment As String)
Me.m_strCode = strCode
Me.m_strDepartment = strDepartment
End Sub
Public ReadOnly Property Code() As String
Get
Return m_strCode
End Get
End Property
Public ReadOnly Property Department() As String
Get
Return m_strDepartment
End Get
End Property
Public Overrides Function ToString() As String
Return Me.Code + " - " + Me.Department
End Function
End Class
次に上記「Department」を「ArrayList」を使ってリスト化しコンボボックスの【DataSource】にセットします。
コンボボックスのプロパティには【DisplayMember】と【ValueMember】が用意されておりこのプロパティに「Department」クラスのプロパティを指定します。
【DisplayMember】には、画面に表示する値が取得できるプロパティを指定し、【ValueMember】には、取得したい値のプロパティを指定します。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Departments As New ArrayList()
Departments.Add(New Department("0001", "営業"))
Departments.Add(New Department("0002", "企画"))
Departments.Add(New Department("0003", "経理"))
AddHandler ComboBox1.SelectedValueChanged, AddressOf ComboBox1_SelectedValueChanged
ComboBox1.DataSource = Departments
ComboBox1.DisplayMember = "Department"
ComboBox1.ValueMember = "Code"
End Sub
Private Sub ComboBox1_SelectedValueChanged(ByVal sender As Object, ByVal e As EventArgs)
If ComboBox1.SelectedIndex <> 0 Then
ComboBox1.Text = ComboBox1.SelectedValue.ToString()
End If
End Sub
上記例では、SelectedValue プロパティが変更された場合、TextプロパティにComboBox1.ValueMemberに設定したDepartmentのプロパティ(Code)をセットします。ComboBox1.SelectedValueは、Objectを返すようなのでもう少し拡張できそうです。次回かな?