2014-09-01 70 views
0

我有兩個CheckListBox(chklbStep,chklbSort),它們包含相似的checklistbox項目。例如chklbStep下,它看起來像"step_factor_20120828"和chklbSort下,它看起來像srt_factor_20120828對兩個類似CheckListBox的鏡像操作

chklbStep     chklbSort 
---------     --------- 
step_factor_20120828  srt_factor_20120828 
step_factor_20120829 

從每個列表中的全部項目(在chklbSort不存在有時匹配項)不完全匹配。 chklbStep是包含所有內容的「主」複選框列表。

考慮到用戶只能在chklbStep上選中/取消選中,我想在兩個列表上鏡像檢查/取消選中操作。下面的代碼的問題是,如果用戶沒有從chklbStep中選中相應的項目,chklbSort上的項目永遠不會被取消選中。 任何想法?

Private Sub chklbStep_ItemCheck(sender As Object, e As ItemCheckEventArgs) 
Handles chklbStep.ItemCheck 

    Dim listCheckedItems As New List(Of String)() 
    Dim listUNcheckedItems As New List(Of String)() 
    ' 
    For Each item In chklbStep.CheckedItems 
     listCheckedItems.Add(item.ToString()) 
    Next 

    If e.NewValue = CheckState.Checked Then 
     listCheckedItems.Add(chklbStep.Items(e.Index).ToString()) 
    End If 

    'Trying to clear the items but this action does not work since the 
    'Sub is only called only on Checking an item 

    For i As Integer = 0 To chklbSort.Items.Count - 1 
     chklbSort.SetItemChecked(i, False) 
    Next 


    For Each item As String In listCheckedItems 

     Dim sSort As String = Regex.Replace(item, "step", "srt", RegexOptions.IgnoreCase) 
     Dim iSort As Integer = chklbSort.Items.IndexOf(sSort) 
     If iSort > -1 Then 

      chklbSort.SetItemChecked(iSort, True) 


     End If 

    Next 
End Sub 
+0

因爲列表內容是不相同的,一個項目的左側一個的索引可以不具有在另一相同的索引。所以e.Index是沒有用的。你可能會更好地使用諸如「factor_20120828」這樣的確定鍵來存儲Class對象,這樣你就可以很容易地找到它們。 – Plutonix 2014-09-01 11:41:10

+0

@Putonix檢查選項正常工作。我只需要的是取消選中 – alwaysVBNET 2014-09-01 11:49:02

+0

事件不會觸發這很奇怪。但是,您可以更改邏輯並將您的子附件添加到Click事件中,掃描您的整個主要清單並完全按照您的要求完成其餘工作。可能不是最好的解決方案,但它應該工作。 – SeraphimFoA 2014-09-01 11:54:01

回答

0

通過修改代碼修正:

If e.NewValue = CheckState.Checked Then 
     listCheckedItems.Add(chklbStep.Items(e.Index).ToString()) 
    Else 
     listCheckedItems.Remove(chklbStep.Items(e.Index).ToString()) 
    End If