Visual Basic 中学校 > Visual Basic サンプル集 > Visual Basic サンプル集目次 > Windows.Forms.ListBox >
表示とは別に行ごとにデータを持つ
項目として表示される文字列の他に行ごとにデータを保存する。。たとえば、コードと名称の両方を保持し、表示には名称を使う場合などに便利。これらのサンプルはVB6のItemDataプロパティを模倣したもの 。
1.手軽な例
リストボックスには作家の名前が表示される。クリックすると本の名前と作家の名前が表示される。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ListBox1.DisplayMember = "Value"
ListBox1.ValueMember = "Key"ListBox1.Items.Add(New DictionaryEntry("破戒", "島崎藤村"))
ListBox1.Items.Add(New DictionaryEntry("浮き雲", "二葉亭四迷"))
ListBox1.Items.Add(New DictionaryEntry("舞姫", "森鴎外"))
ListBox1.Items.Add(New DictionaryEntry("当世書生気質", "坪内逍遥"))End Sub
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged Dim Author As String '作者名
Dim Book As String '著作名
Dim Item As DictionaryEntry = ListBox1.SelectedItemAuthor = Item.Value
Book = Item.KeyMsgBox(Book & " - " & Author)
End Sub
2.応用の利く例
上の例と同じく、リストボックスには作家の名前が表示される。クリックすると本の名前と作家の名前が表示される。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ListBox1.Items.Add(New ListItem("破戒", "島崎藤村"))
ListBox1.Items.Add(New ListItem("浮き雲", "二葉亭四迷"))
ListBox1.Items.Add(New ListItem("舞姫", "森鴎外"))
ListBox1.Items.Add(New ListItem("当世書生気質", "坪内逍遥"))End Sub
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged Dim Author As String '作者名
Dim Book As String '著作名
Dim Item As ListItem = ListBox1.SelectedItemAuthor = Item.Value
Book = Item.DataMsgBox(Book & " - " & Author)
End Sub
Public Class ListItem Public Data As String
Public Value As StringPublic Sub New(ByVal Data As String, ByVal Value As String) Me.Data = Data
Me.Value = ValueEnd Sub
Public Overrides Function ToString() As String Return Value
End Function
End Classメモ:この例では説明の便宜のためにListItemクラスをクラス内クラスとしていますが、実際には独立クラスとした方が汎用性・柔軟性等の面で優れています。