3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(.Net)DictionaryEntryを使ってコンボボックスに表示文字列と処理用の値をセットする

ComboBox.Items.Add() や ComboBox.Items.AddRange() を使うとコンボボックスのリストに出てくる項目を追加することができますが、1つ(表示用)しか追加できません。なので、リストに表示するデータとそれに対応した処理用の値とを入れることができません。

で、ComboBox.DataSource プロパティを用い DataSet や DataTable 等をバインドさせて、ComboBox.DisplayMember プロパティと ComboBox.ValueMember プロパティで表示用の列と処理用の値の列を指定できることは知っていました。

しかし、簡単なデータをコンボボックスにセットするのに、いちいち DataTable を作成し、列を定義し…とするのは面倒だなと思っていたら、.Net にはキーと値を持てる便利な構造体があったんですね。

それが、System.Collections.DictionaryEntry 構造体です。

これは "Key" と "Value" という Object 型のプロパティを持っているので、Key プロパティに表示用データ、Value プロパティに値を入れ、DictionaryEntry を ArrayList でコレクションにすることで、手軽にコンボボックスに表示データと値をセットできそうです。

こんな感じになります。

'cmbTest は ComboBox オブジェクト

Dim lstCmbItems As New ArrayList()

lstCmbItems.Add(New DictionaryEntry("データ1", 0))

lstCmbItems.Add(New DictionaryEntry("データ2", 1))

lstCmbItems.Add(New DictionaryEntry("データ3", 2))

cmbTest.DataSource = lstCmbItems

cmbTest.DisplayMember = "Key"

cmbTest.ValueMember = "Value"