リスト ボックス内の項目を表す小さなクラスから始めます。
Public Class ListItem
Private _key As String = String.Empty
Private _value As String = String.Empty
Public Sub New(ByVal key As String, ByVal value As String)
_key = key
_value = value
End Sub
Public ReadOnly Property Key() As String
Get
Return _key
End Get
End Property
Public ReadOnly Property Value() As String
Get
Return _value
End Get
End Property
' Prevents the object type from displaying in the list box.
Public Overrides Function ToString() As String
Return _value
End Function
End Class
ここで、1 つのフォーム (lstLeft と lstRight) に 2 つの ListBox オブジェクトがあり、2 つのボタン (項目を右に移動するボタンと項目を左に移動するボタン) があるとします。
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
InitData()
End Sub
Private Sub InitData()
With lstLeft.Items
.Add(New ListItem("1", "Tres Hombres ZZ TOP"))
.Add(New ListItem("2", "Fandango! ZZ TOP"))
.Add(New ListItem("3", "Soul Kiss Tom Duda"))
.Add(New ListItem("4", "Instrumental Telepathy Tom Duda"))
End With
End Sub
Private Sub btnMoveRight_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMoveRight.Click
If lstLeft.SelectedItem IsNot Nothing Then
Dim selectedItem As ListItem = DirectCast(lstLeft.SelectedItem, ListItem)
lstRight.Items.Add(selectedItem)
lstLeft.Items.Remove(selectedItem)
End If
End Sub
Private Sub btnMoveLeft_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMoveLeft.Click
If lstRight.SelectedItem IsNot Nothing Then
Dim selectedItem As ListItem = DirectCast(lstRight.SelectedItem, ListItem)
lstLeft.Items.Add(selectedItem)
lstRight.Items.Remove(selectedItem)
End If
End Sub
End Class
これは、選択した ListItem オブジェクトへの参照を「他の」ListBox に追加し、選択した ListItem オブジェクトへの参照を現在の ListBox から削除するだけです。2 つの別々のフォーム間でこれを行う場合は、各フォームに関数が必要になりPublic Property AddToList(item As ListItem)
ます。まず、反対のフォームで関数を呼び出してそのフォームの ListBox に追加し、次に現在のフォームから ListItem オブジェクトを削除します。