tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルItemDataの値
記事No5524
投稿日: 2007/05/21(Mon) 13:00
投稿者くわ
くわと申します
お世話になります

 初歩的な質問ですが・・・

 コンボボックスのプロパティのItemDataで
 たとえば、コンボで”田中さん”が選択された場合にItemData内に
 入っている100と言う数字を取得すると言うVB6で作ていたのですが
 VB.Netではどの様にしたら良いのでしょうか?
 
 ご教授頂ければ幸いです

[ツリー表示へ]
タイトル自己解決しました
記事No5525
投稿日: 2007/05/21(Mon) 13:13
投稿者くわ
申し訳ありません
検索が甘かった様です
自己解決しました

[ツリー表示へ]
タイトルRe: ItemDataの値
記事No5526
投稿日: 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 による
データバインドを使うこともできます。

[ツリー表示へ]
タイトルありがとうございます
記事No5528
投稿日: 2007/05/21(Mon) 13:50
投稿者くわ
魔界の仮面弁士様
ありがとうございます
 
 他のページで魔界の仮面弁士の発言をみて自己解決した次第です
 また、親切な投稿ありがとうございます

[ツリー表示へ]