改进列表框项范围选择

本文关键字:范围 选择 列表 | 更新日期: 2023-09-27 18:35:48

我有一个包含大约 100 个项的列表框,以及一个用于在 WindowsForms 中选择/取消选择所有项的复选框。

当我选择所有项目

时,程序会变慢,直到循环选择每个项目,选择所有项目需要 4-5 秒,选择真的很慢(我有一台很好的机器,我已经把它测试到一个测试项目中,只是自己的 Listbox 控件选择项目很慢)

If Not ListBox1.SelectedItems.Count = ListBox1.Items.Count Then
    For item As Integer = 0 To Me.ListBox1.Items.Count - 1
        ListBox1.SetSelected(item, True)
    Next
End If

是否存在任何技术来改进控件上的此项选择?

我试图在选择项目时禁用控件上的绘图,但它浪费了 4-5 次来选择所有项目......

此外,我不考虑仅创建新线程以选择控件项的选项,原因有两个,1.更新控件需要相同的时间,2.创建它不是很优雅只是在控件中选择少量项目...

改进列表框项范围选择

尝试在选择项目的循环中使用BeginUpdate()EndUpdate(),如下所示:

If Not ListBox1.SelectedItems.Count = ListBox1.Items.Count Then
    ' Stop the ListBox from drawing while items are added.
    ListBox1.BeginUpdate()
    For item As Integer = 0 To Me.ListBox1.Items.Count - 1
        ListBox1.SetSelected(item, True)
    Next
    ' End the update process and force a repaint of the ListBox.
    ListBox1.EndUpdate()
End If

阅读 BeginUpdate() 和 EndUpdate() 文档了解更多信息。

有内置函数来选择和取消选择所有项目。我认为它们非常快。因此,您可以在事件处理程序中尝试此操作...

myListBox.SelectAll();

myListBox.UnselectAll();