ヘッダー

VB.NET2002対応 VB.NET2003対応 VB2005対応

 

Visual Basic 中学校 > VB.NET サンプル > Windows.Forms.ListBox >

表示とは別に行ごとにデータを持つ

項目として表示される文字列の他に行ごとにデータを保存する。。たとえば、コードと名称の両方を保持し、表示には名称を使う場合などに便利。これらのサンプルはVB6のItemDataプロパティを模倣したもの 。

 

1.手軽な例

リストボックスには作家の名前が表示される。クリックすると本の名前と作家の名前が表示される。

VB.NET2002対応 VB.NET2003対応 VB2005対応

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.SelectedItem

    Author = Item.Value
    Book = Item.Key

    MsgBox(Book & " - " & Author)

End Sub

 

2.応用の利く例

上の例と同じく、リストボックスには作家の名前が表示される。クリックすると本の名前と作家の名前が表示される。

VB.NET2002対応 VB.NET2003対応 VB2005対応

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.SelectedItem

    Author = Item.Value
    Book = Item.Data

    MsgBox(Book & " - " & Author)

End Sub

Public Class ListItem

    Public Data As String
   
Public Value As String

    Public Sub New(ByVal Data As String, ByVal Value As String)

        Me.Data = Data
       
Me.Value = Value

    End Sub

    Public Overrides Function ToString() As String

        Return Value

    End Function

End Class

メモ:この例では説明の便宜のためにListItemクラスをクラス内クラスとしていますが、実際には独立クラスとした方が汎用性・柔軟性等の面で優れています。