我已經使用的字典映射鍵CLB1項到相應CLB2項。 看一看我的示例代碼運行正常:
Private mytable As New Generic.Dictionary(Of String, List(Of String))
Sub New()
' Dieser Aufruf ist für den Windows Form-Designer erforderlich.
InitializeComponent()
mytable.Add("Object A", New List(Of String)(New String() {"Object A1", "Object A2", "Object A3"}))
mytable.Add("Object B", New List(Of String)(New String() {"Object B1", "Object B2", "Object B3"}))
mytable.Add("Object C", New List(Of String)(New String() {"Object C1", "Object C2", "Object C3"}))
mytable.Add("Object D", New List(Of String)(New String() {"Object D1", "Object D2", "Object D3"}))
mytable.Add("Object E", New List(Of String)(New String() {"Object E1", "Object E2", "Object E3"}))
For Each key As String In mytable.Keys
Me.clb1.Items.Add(key, False)
Next
End Sub
Private Sub chkSelectAll_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChkSelectAll.CheckedChanged
For i As Int32 = 0 To Me.clb1.Items.Count - 1
Me.clb1.SetItemChecked(i, ChkSelectAll.Checked)
Next
End Sub
Private Sub clb1_ItemCheck(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ItemCheckEventArgs) Handles clb1.ItemCheck
Dim key As String = DirectCast(Me.clb1.Items(e.Index), String)
If e.NewValue = CheckState.Checked Then
For Each value As String In mytable(key)
Me.Clb2.Items.Add(value, False)
Next
Else
For Each value As String In mytable(key)
Me.Clb2.Items.Remove(value)
Next
End If
End Sub
問候, 添
編輯: 當你不想使用泛型可以使用哈希表和ArrayList來代替。 我的示例代碼幾乎相同。 看一看:
Private mytable As New Hashtable()
Sub New()
' Dieser Aufruf ist für den Windows Form-Designer erforderlich.
InitializeComponent()
mytable.Add("Object A", New ArrayList(New String() {"Object A1", "Object A2", "Object A3"}))
mytable.Add("Object B", New ArrayList(New String() {"Object B1", "Object B2", "Object B3"}))
mytable.Add("Object C", New ArrayList(New String() {"Object C1", "Object C2", "Object C3"}))
mytable.Add("Object D", New ArrayList(New String() {"Object D1", "Object D2", "Object D3"}))
mytable.Add("Object E", New ArrayList(New String() {"Object E1", "Object E2", "Object E3"}))
For Each key As String In mytable.Keys
Me.clb1.Items.Add(key, False)
Next
End Sub
Private Sub chkSelectAll_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChkSelectAll.CheckedChanged
For i As Int32 = 0 To Me.clb1.Items.Count - 1
Me.clb1.SetItemChecked(i, ChkSelectAll.Checked)
Next
End Sub
Private Sub clb1_ItemCheck(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ItemCheckEventArgs) Handles clb1.ItemCheck
Dim key As String = DirectCast(Me.clb1.Items(e.Index), String)
If e.NewValue = CheckState.Checked Then
For Each value As String In mytable(key)
Me.Clb2.Items.Add(value, False)
Next
Else
For Each value As String In mytable(key)
Me.Clb2.Items.Remove(value)
Next
End If
End Sub
感謝您的及時回覆添但unfortunatley這個程序是工作,老闆是一個堅持,我只使用數組,的ArrayList,結構和哈希表「的稠度的緣故「* grrr *。我目前正在將您的方法應用到我被「允許」使用的工具中。我們將看到它是如何從這裏開始的。 〜8th – 8thWonder 2010-03-25 16:20:19
你可以使用一個Hashtable和一個Arraylist來代替我的Dictionary和List(String)。它幾乎相同。 – 2010-03-25 18:49:03
小心示範?我吮吸哈希表:( – 8thWonder 2010-03-26 13:10:36