【问题标题】:Improve Listbox item range selection改进列表框项目范围选择
【发布时间】:2013-10-18 00:54:27
【问题描述】:

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

当我选择所有项目时程序变慢直到循环选择了每个项目,选择所有项目需要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.不是很优雅创建它只是为了选择控件中的少量项目...

【问题讨论】:

  • 您尝试了什么禁用列表框控件上的绘图?实际放置您尝试过的代码会很有帮助,而不是仅仅说我尝试了一些东西但它仍然很慢。
  • 在我的问题上,您可以看到我现在正在使用的代码,绘制我之前测试过的东西,所以我删除了代码,因为它不起作用,我没有没有那个代码,但我只是认为禁用控件上的绘图(也禁用绘画事件)可以加速列表框的缓慢逻辑以加速项目选择。
  • 这个列表框是否绑定了数据?您是否在需要一段时间的类/属性中做某事?如果是这样,您需要以某种方式加速该代码。如果没有,那么您需要一台新计算机,因为这必须是 IBM 5150,如果需要 4-5 秒。
  • 不,列表框只有字符串。我已经用一个“测试”项目(一个空的 UI)对其进行了测试,请尝试将 100 个项目添加到列表框中,然后尝试使用循环来检查/取消选中所有你会看到我的意思......它需要很多秒。

标签: c# .net vb.net winforms listbox


【解决方案1】:

尝试在选择项目的循环周围使用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() 文档了解更多信息。

【讨论】:

  • 嗨,我仍然有这个问题,beginupdate/endupdate 是我试图在 Listbox 的逻辑上加快速度的那些事情之一,但是......没办法。
【解决方案2】:

有选择和取消选择所有项目的内置函数。我认为他们很快。所以你可以在你的事件处理程序中尝试这个......

myListBox.SelectAll();

myListBox.UnselectAll();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    相关资源
    最近更新 更多