首页 文章

Listbox ClearSelected方法会保留选定的项目

提问于
浏览
2

我有几个winforms列表框控件我在用户控件中托管 . 我想要在这个用户控件中的行为是我只希望其中一个列表框一次拥有一个选定的项目 .

因此,如果我选择了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

我将列表框的名称存储在字典中 . (列表框的数量是动态的) . 此示例中的listBoxName是刚刚单击的列表框,因此此代码可以避免清除该框中的选择 .

我运行此代码时获得的行为是非常意外的 . 假设我有3个列表框... listbox1,listbox2和listbox3 . 假设当前选择了listbox2中的item3 . 如果我单击listbox1的第4项,那么最终结果是listbox1中的第4项被选中(如预期的那样),但listbox2已选择第1项 .

简而言之,之前具有项目选择的listBox仍然选择了项目1而不是清除选择 .

我在ClearSelection方法调用之后立即发出了一个debug.print listBox.SelectedItems.Count,并且确定它已经选择了1个项目 .

有关如何执行此操作或修复我的代码的任何想法?

赛斯

编辑:BTW,我将列表框绑定到业务对象集合 .

1 回答

  • 2

    我运行了一个包含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事件中运行此代码,这会使您进入一个快速导致崩溃的无限循环 .

相关问题