タイトル | : Re: ItemDataの値 |
記事No | : 5526 |
投稿日 | : 2007/05/21(Mon) 13:32 |
投稿者 | : 魔界の仮面弁士 |
> コンボボックスのプロパティのItemDataで > たとえば、コンボで”田中さん”が選択された場合にItemData内に > 入っている100と言う数字を取得すると言うVB6で作ていたのですが
VB6 では「文字列」しか .AddItem できなかったため、関連情報として .ItemData に 整数を割り当てるという方法が使われていましたが、.NET では「任意のオブジェクト」を .Items.Add できるようになったため、.ItemData が廃止されています。
> VB.Netではどの様にしたら良いのでしょうか? .Items.Add で登録されたデータ(の中で選択中のデータ)を、.SelectedItem から取得できます。 たとえば、データの管理のために以下のような Sample クラスを用意して――
Class Sample Private _value As Integer Private _text As String Public Sub New(ByVal value As Integer, ByVal text As String) _value = value _text = text End Sub Public ReadOnly Property Value() As Integer Get Return _value End Get End Property Public ReadOnly Property Text() As String Get Return _text End Get End Property Public Overrides Function ToString() As String Return Text End Function End Class
それを、.Items.Add (ないしは、.Items.AddRange )で登録して――
ComboBox1.Items.Add(New Sample(123, "au")) ComboBox1.Items.Add(New Sample(456, "Docomo")) ComboBox1.Items.Add(New Sample(798, "SoftBank"))
それを、任意のイベント(SelectionChangeCommitted や SelectedIndexChanged 等)から、
Dim item As Sample = DirectCast(ComboBox1.SelectedItem, Sample) Dim code As Integer = item.Value Dim title As String = item.Text
のようにして取得することができます。
データ管理クラスを作る分の手間はかかりますが、管理クラスに手を加えれば、 数値や文字列以外の情報も自由に取り扱う事ができるため、VB6 以上に自由度は高いかと。
また .Items.Add ではなく、.DataSource + .DisplayMember + .ValueMember による データバインドを使うこともできます。
|