Winforms Listbox ClearSelected方法使项目保持选中状态

Winforms Listbox ClearSelected方法使项目保持选中状态,winforms,user-controls,listbox,selection,Winforms,User Controls,Listbox,Selection,我在一个用户控件中托管了几个winforms listbox控件。我希望此用户控件中的行为是,我一次只希望其中一个列表框具有选定项 因此,如果我选择了Listbox1中的一个项目,并单击了listbox2列表框中的一个项目,那么应该会自动取消选择所有项目 我已尝试使用以下代码来实现这一点: dim listBox as listbox For Each listName As String In _listboxes.Keys If listName <>

我在一个用户控件中托管了几个winforms listbox控件。我希望此用户控件中的行为是,我一次只希望其中一个列表框具有选定项

因此,如果我选择了Listbox1中的一个项目,并单击了listbox2列表框中的一个项目,那么应该会自动取消选择所有项目

我已尝试使用以下代码来实现这一点:

   dim listBox as listbox
   For Each listName As String In _listboxes.Keys
        If listName <> listboxName Then
            listbox = me.controls(listName)
            listbox.ClearSelected()
        End If
    Next
将列表框作为列表框进行调整
对于_listboxs.Keys中作为字符串的每个listName
如果listName listboxName,则
listbox=me.controls(listName)
listbox.ClearSelected()
如果结束
下一个
我将列表框的名称存储在字典中。(列表框的数量是动态的)。本例中的listBoxName是刚刚单击的listbox,因此此代码避免清除该框中的选择

运行此代码时出现的行为非常意外。假设我有3个列表框…列表框1、列表框2和列表框3。假设listbox2中的项目3当前处于选中状态。如果我单击listbox1的项目4,则最终结果是选择了listbox1中的项目4(如预期),但listbox2选择了项目1

简而言之,以前选择了项的列表框仍然选择了项1,而不是清除选择

在ClearSelection方法调用之后,我立即发出了debug.print listBox.SelectedItems.Count,并且确实显示选择了1项

关于如何做这件事或修复我的代码有什么想法吗

赛斯


编辑:顺便说一句,我正在将列表框绑定到业务对象集合。

我运行了一个包含2个列表框的快速示例,并使用了此方法:

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles ListBox1.Click, ListBox2.Click
    Dim lbx As ListBox = CType(sender, ListBox)
    Dim i As Integer = lbx.SelectedIndex
    ListBox1.ClearSelected()
    ListBox2.ClearSelected()

    lbx.SelectedIndex = i

End Sub
只需在所有列表框中循环,调用ClearSelected方法,然后重新选择触发事件的方法。不要在.SelectedIndex事件中运行此代码,这将使您进入一个无限循环,这将很快导致崩溃