VB.NETでVB6のComboBoxのItemDataのような使い方をしたいのですが、どのようにすればできますでしょうか?
Items プロパティを使って下さい。
すいません。質問の仕方が悪くて。言葉が足りなかったようです。
VB6のComboBoxでは、プルダウンで画面表示するリストとは別にそのリストに対応したデータを設定できるのですがVB.NETでは同のように実現するのでしょうか。
例)画面表示させるリストは顧客でそれに対応する顧客コードを内部的に保持させる。DataSetと連携させればValueMember,DisplayMemberプロパティを使って実現できるようですが、DataSetと連携させずに手動で設定したいのですが。
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
といった感じで。
ありがとうございました。
早速やって見ます。
でも、前より少し面倒になっちゃったんですね。
ツイート | ![]() |