.NET VBでコンボボックスに二つのデータをもちたいのです。
VB6.0では下記のようなコードを書いていました。
ですが、.NETでは、「ItemData」に相当するものが見つかりません。
ひとつのItemに二つのデータを持ちたいときはどのようにすれば
よろしいのでしょうか?
教えてください。
With cbodata
For i = 0 To objrs.EOF
.AddItem(objrs.field(0))
.ItemData(.NewIndex) = objrs.field(1)
Next
End With
ComboBox.Items.Addメソッドの引数が、String型ではなく、
Object型になっている事に、気づかれましたか?
VB6では、StringのデータをItemで扱い、対応するLong値をItemDataで扱っていましたが、
System.Windows.Forms.ComboBox では、任意のオブジェクトを扱えるように設計されています。
そのため、ItemDataは不要なのです。
Friend Class PersonalInfo
Public Code As Short
Public Name As String
Public Sub New(ByVal Code As Short, ByVal Name As String)
Me.Code = Code
Me.Name = Name
End Sub
Public Overrides Function ToString() As String
Return Name
End Function
End Class
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
With Me.ComboBox1.Items
.Add(New PersonalInfo(1, "コーラ"))
.Add(New PersonalInfo(2, "コーヒー"))
.Add(New PersonalInfo(3, "烏龍茶"))
End With
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Const MsgFmt As String = "商品コード:{0:000}" & vbCrLf & "商品名称:{1}"
With DirectCast(Me.ComboBox1.SelectedItem, PersonalInfo)
MessageBox.Show(String.Format(MsgFmt, .Code, .Name))
End With
End Sub
プロパティ名の記述が間違っていたので、訂正します。
誤:
> VB6では、StringのデータをItemで扱い、対応するLong値をItemDataで
正:
VB6では、StringのデータをListで扱い、対応するLong値をItemDataで
# サンプルを見直してみたら、クラス名が "PersonalInfo" なのに、
# 個人情報ではなく、商品情報を入力しちゃってますね。(恥)
# 動作的には問題ないとは言え、他の名前にしておけば良かったなぁ…。
# http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200309/03090008.txt
魔界の仮面騎士さん、とってもわかりやすかったです!!
おかげで、できました〜〜。
本当にありがとうございました。
# ゴミレス。
> 魔界の仮面騎士さん
違います。(泣)
すみません、すっかり勘違いです(>_<)
教えていただいてるのに、間違えてしまってすみませんでした。
ツイート | ![]() |