我无法根据在另一列表框(CLB)中所做的选择来填充选中的列表框(CLB)。还需要注意的是,我在顶部有一个"Select All“复选框,用于选中/取消选中第一个CLB中的所有项。代码如下:
Private Sub chkSelectAll_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSelectAll.CheckedChanged
For i As Integer = 0 To clb1.Items.Count - 1
clb1.SetItemChecked(i, chkSelectAll.Checked)
Next
If chkSelectAll.Checked = False Then
clb2.Items.Clear()
End If
End Sub
Private Sub clb1_ItemCheck(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ItemCheckEventArgs) Handles clb1.ItemCheck
Dim i As Integer = clb1.SelectedIndex
For j As Integer = 0 To al_2.Count - 1
If i = -1 Then
For k As Integer = 0 To al_2.Count - 1
If Not clb2.Items.Contains(al_2(k).sDate) Then
clb2.Items.Add(al_2(k).sDate)
Else : k += 1
End If
Next
ElseIf (e.NewValue = CheckState.Checked And al_2(j).sName = al_1(i)) Then
clb2.Items.Add(al_2(j).sDate)
ElseIf (e.NewValue = CheckState.Unchecked And al_2(j).sName = al_1(i)) Then
clbProdBkups.Items.Remove(al_2(j).sDate)
End If
Next
End Sub第一个CLB由按钮单击事件上的值的数组列表填充。根据在第一个CLB中检查到的内容,结构数组列表中的相应值应该填充第二个CLB。下面的代码部分工作,直到点击"Select All“复选框为止,此时如果在选中"Select All”之前已经选择了其他值,则第二个CLB将填充正确数量的对应值,但只填充第一个CLB中最近选择的项的值,而不是所有未选择的项的所有对应值。
任何真知灼见都将不胜感激。
~第8位
发布于 2010-03-25 06:08:16
我使用了一个字典将关键字clb1-item映射到相应的clb2-item。看看我的样例代码,它运行得很好:
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致以问候,时间
编辑:当你不想使用泛型时,你可以使用哈希表和数组列表。我的示例代码几乎是相同的。看一看:
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 Subhttps://stackoverflow.com/questions/2510373
复制相似问题