Winforms Listbox ClearSelected方法使项目保持选中状态
我在一个用户控件中托管了几个winforms listbox控件。我希望此用户控件中的行为是,我一次只希望其中一个列表框具有选定项 因此,如果我选择了Listbox1中的一个项目,并单击了listbox2列表框中的一个项目,那么应该会自动取消选择所有项目 我已尝试使用以下代码来实现这一点: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 <>
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事件中运行此代码,这将使您进入一个无限循环,这将很快导致崩溃