我在表单(Windows窗体)绑定到数据源(BindingList)上有一个ownerdrawn ListBox.我需要提供一个选项来快速选择所有项目(最多500000).
这就是我目前正在做的事情:
for (int i = 0; i < listBox.Items.Count; i++)
listBox.SetSelected(i, true);
Run Code Online (Sandbox Code Playgroud)
这非常慢,不可接受.有人知道更好的解决方案吗?
请参阅:ListBox选择所有项目
我有一个ListBox,我需要选择所有项目.唯一的问题是,我在ListBox.SelectIndexChanged事件上有事件处理程序,它会做一些CPU密集型的事情.在循环中选择循环中的项会导致程序在循环的每次迭代中触发SelectIndexChanged事件.
我已将循环包含在Suspend/ResumeLayout()中,如下所示:
SuspendLayout();
for (int i = 0; i < listBox.Items.Count; i++)
listBox.SetSelected(i, true);
ResumeLayout();
Run Code Online (Sandbox Code Playgroud)
但它仍然会触发事件并且仍然需要很长时间来更新选择.
我可以用一个简单的布尔标志解决这个问题,当我开始更新时,我会切换,但是如果有一种更简洁的解决方法,那就太棒了.
谢谢.
我正在尝试选择ListBox中的所有项目并为此目的制作此扩展方法:
public static void SetSelectedAllItems(this ListBox ctl)
{
for (int i = 0; i < ctl.Items.Count; i++)
{
ctl.SetSelected(i, true);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是如果我在ListBox中有很多项目,那么完成这个任务需要很长时间,我可以看看ListBox如何自动向下滚动并选择项目.
有没有办法临时暂停控件的更新,以便任务完成得更快?我试过用:
ctl.SuspendLayout();
for (int i = 0; i < ctl.Items.Count; i++)
...
ctl.ResumeLayout();
Run Code Online (Sandbox Code Playgroud)
但这似乎没有做任何事情.