我有一个checkedlistbox1,它通过带有folderbrowserdialog的搜索功能填充。一旦我检查了一个项目(= XML文件),它就会通过调用一个单独的类来根据某些节点填充一个列表框。这很好。
我接下来要做的是当我在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
答案 0 :(得分: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值。