ここではコンボボックス(ComboBoxコントロール)に2つ以上の値を持たせる方法について紹介します。

項目を追加する

以下はDataTableを使って、コンボボックスにコードと名称の2つの値を追加する例です。コンボボックスには名称を表示してコードは隠します。

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load

    ' テキストボックス部分は編集不可にする
    Me.ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList

    ' データテーブルの作成
    Dim dt As New DataTable
    dt.Columns.Add("code")
    dt.Columns.Add("name")
    Dim dtrow As DataRow

    dtrow = dt.NewRow
    dtrow("code") = String.Empty
    dtrow("name") = String.Empty
    dt.Rows.Add(dtrow)

    dtrow = dt.NewRow
    dtrow("code") = "001"
    dtrow("name") = "北海道"
    dt.Rows.Add(dtrow)

    dtrow = dt.NewRow
    dtrow("code") = "002"
    dtrow("name") = "東北"
    dt.Rows.Add(dtrow)

    dtrow = dt.NewRow
    dtrow("code") = "003"
    dtrow("name") = "関東"
    dt.Rows.Add(dtrow)

    dtrow = dt.NewRow
    dtrow("code") = "004"
    dtrow("name") = "中部"
    dt.Rows.Add(dtrow)

    dtrow = dt.NewRow
    dtrow("code") = "005"
    dtrow("name") = "近畿"
    dt.Rows.Add(dtrow)

    dtrow = dt.NewRow
    dtrow("code") = "006"
    dtrow("name") = "中国"
    dt.Rows.Add(dtrow)

    dtrow = dt.NewRow
    dtrow("code") = "007"
    dtrow("name") = "四国"
    dt.Rows.Add(dtrow)

    dtrow = dt.NewRow
    dtrow("code") = "008"
    dtrow("name") = "九州・沖縄"
    dt.Rows.Add(dtrow)

    ' コンボボックスの設定
    ComboBox1.DataSource = dt
    ComboBox1.DisplayMember = "name"
    ComboBox1.ValueMember = "code"

End Sub

7行目~55行目でコンボボックスに表示する2つの項目をDataTableとして作成します。
58行目でComboBoxコントロールのDataSourceプロパティにDataTableをセットします。
59行目でDisplayMemberプロパティに画面に表示する列名を指定します。
60行目でValueMemberプロパティに表示しない内部データの列名を指定します。


選択されている情報を取得する

以下は、ボタンをクリックしたらDataRowViewを使って、選択したコンボボックスの2つの値を取得して表示させる例です。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    ' 選択したデータをDataRowViewにセットする
    Dim selectItem As DataRowView = CType(Me.ComboBox1.SelectedItem, DataRowView)
    Dim strCode = selectItem.Row.ItemArray(0) ' コードの取得
    Dim strName = selectItem.Row.ItemArray(1) ' 名称の取得

    MessageBox.Show(strCode & ":" & strName)

End Sub


以上、コンボボックス(ComboBoxコントロール)に2つ以上の値を持たせる方法について解説しました。