VB.NETのComboBoxでItemDataを使うには?

解決


VB.NET初心者  2004-11-24 19:43:17  No: 117753

VB.NETでVB6のComboBoxのItemDataのような使い方をしたいのですが、どのようにすればできますでしょうか?


特攻隊長まるるう  2004-11-24 20:56:30  No: 117754

Items プロパティを使って下さい。


VB.NET初心者  2004-11-24 22:38:19  No: 117755

すいません。質問の仕方が悪くて。言葉が足りなかったようです。
VB6のComboBoxでは、プルダウンで画面表示するリストとは別にそのリストに対応したデータを設定できるのですがVB.NETでは同のように実現するのでしょうか。
例)画面表示させるリストは顧客でそれに対応する顧客コードを内部的に保持させる。DataSetと連携させればValueMember,DisplayMemberプロパティを使って実現できるようですが、DataSetと連携させずに手動で設定したいのですが。


魔界の仮面弁士  2004-11-24 22:45:11  No: 117756

VB6のComboBox.AddItem で登録できるのは、Stringだけでしたが、
.NETのComboBox.Itemsに登録されるのは、Object です。

つまり、任意の型のデータを登録できるようになったため、
数値専用の ItemData を用意する必要が無くなったわけです。

例えば、VB6のItemDataのように、Long型の数値を管理したいのであれば、
「Integer型を表すプロパティ」を持った構造体またはクラスを用意して、
それを登録するようにすればOKかと。

具体的には、

 Public Structure ComboItem
   Public Text As String
   Public Number As Integer

   'ComboBoxには、ToString()メソッドの内容が表示される
   Public Overrides Function ToString() As String
     Return Text
   End Function

   '登録を簡単にするため、引数付きのコンストラクタを定義
   Public Sub New(ByVal S As String, ByVal I As Integer)
     Text = S
     Number = I
   End Sub
 End Structure

といった構造体を用意しておき、

    ComboBox1.Items.Add(New ComboItem("AAA", 123))
    ComboBox1.Items.Add(New ComboItem("BBB", 234))
    ComboBox1.Items.Add(New ComboItem("CCC", 345))

のようにして登録する事ができます。
取り出すときは、

    With DirectCast(ComboBox1.SelectedItem, ComboItem)
        A = .Text
        B = .Number
    End With

といった感じで。


VB.NET初心者  2004-11-24 23:49:54  No: 117757

ありがとうございました。
早速やって見ます。
でも、前より少し面倒になっちゃったんですね。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加