2017-02-15 79 views
0

我有一個checkedlistbox1,它通過一個帶有folderbrowserdialog的搜索功能來填充。一旦我檢查了一個項目(= XML文件),它會通過調用一個單獨的類來根據特定節點填充列表框。這工作正常。Checkedlistbox:取消選中項目並在新選擇時重新執行動作

我希望接下來做的是當我在checkedlistbox1中選擇另一個項目時,它取消選中先前檢查的項目並再次運行單獨的類以顯示新選定項目的節點。

我的代碼是根據我所做的其他搜索嘗試模糊。請注意我希望它做什麼,這不像我現在有我的代碼,因爲我不希望它在我選擇另一個項目時拋出錯誤。我只是想讓它取消選擇上一個,然後再次對新選擇的項目執行操作。

我希望有人能幫我解決這個問題。

代碼:

Try 
     Dim checkLstBox As CheckedListBox = CType(sender, CheckedListBox) 
     Dim targetNum As Integer = 1 
     If e.NewValue = CheckState.Checked AndAlso checkLstBox.CheckedItems.Count + 1 > targetNum Then 
      Call ClsMessageBoxes.CheckedListbox1_maxcheck_Form2() 
      e.NewValue = CheckState.Unchecked 
      For i As Integer = 0 To f5.CheckedListBox1.Items.Count - 1 
       f5.CheckedListBox1.SetItemChecked(i, False) 
      Next 'This part at least throws an error if I select a new item in checkedlistbox1 and de-selects the previous item' 

     Else 
      'this part does not work' 
      f5.ListBoxDestPlate.Items.Clear() 
      f5.CheckedListlistbox2.SelectedItems.Clear() 

      'this part is meant to select an item in another checkbox according to certain tekst in the filename' 
      Dim i As Integer 
      If ClsSharedProperties2.filePath2.Contains("Text1") Then 
       i = 1 
       f5.Checkedlistbox2.SetItemChecked(i, True) 
       Call ClsScan.scanning2() 

      ElseIf ClsSharedProperties2.filePath2.Contains("Text2") Then 
       i = 2 
       f5.Checkedlistbox2.SetItemChecked(i, True) 
       Call ClsScan.scanning2() 
      End If 
     End If 
    Catch ex As Exception 
     MessageBox.Show(ex.Message & vbCrLf & "Stack Trace: " & vbCrLf & ex.StackTrace) 
End Try 
+2

'我沒有有用的代碼'當然可以。發佈你最近的努力。它將幫助任何想回答的人理解這個問題。請閱讀[問]並參加[tour] – Plutonix

+0

謝謝Plutonix。我現在添加了代碼。 – Woudi

回答

0

你的代碼是有點亂用我猜測,以其他形式引用(F5 ClsScan?)。

在一般情況下,該代碼將與檢查項目工作,並且取消所有現有項目:

Private Sub clb_ItemCheck(sender As Object, e As ItemCheckEventArgs) Handles clb.ItemCheck 
    If e.NewValue = CheckState.Checked Then 
    For Each i As Integer In clb.CheckedIndices 
     clb.SetItemChecked(i, False) 
    Next 
    MessageBox.Show("Checked " & clb.Items(e.Index).ToString) 
    End If 
End Sub 

在MessageBox線將與您傳遞項目參考你需要做的任何函數或方法所取代過濾。

關於ItemCheck事件需要注意的一件事是,集合中的項目實際上並不是已檢查。這就是爲什麼你必須依賴e.Index值。

+0

謝謝拉爾斯。 CheckedIndices是我正在尋找的。它現在很好用!對不起,亂碼。我很高興你能繞過它。 – Woudi

相關問題