「ほっ」と。キャンペーン
(.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"

[PR]
by jehoshaphat | 2009-03-11 22:02 | .Net開発 | Trackback | Comments(2)
トラックバックURL : http://jehupc.exblog.jp/tb/9812996
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。
Commented by テル at 2009-11-24 14:55 x
これはスマートなやりかたですね。
助かりました。ありがとうございました!
Commented by jehoshaphat at 2009-12-01 22:06
ども。3流PGです。
自分もこの方法を知った時は、いままでDataTable をバインドしてやってたのは何だったんだろうって感じになりましたねw
.Netのクラスライブラリも膨大なので、探せばもっと便利になるクラスがあるのかもしれません。


<< (SQL)SELECT句に副問... (.Net)DataTable... >>