相关疑难解决方法(0)

如何快速选择ListBox中的所有项目?

我在表单(Windows窗体)绑定到数据源(BindingList)上有一个ownerdrawn ListBox.我需要提供一个选项来快速选择所有项目(最多500000).

这就是我目前正在做的事情:

for (int i = 0; i < listBox.Items.Count; i++)
    listBox.SetSelected(i, true);
Run Code Online (Sandbox Code Playgroud)

这非常慢,不可接受.有人知道更好的解决方案吗?

c# listbox winforms

5
推荐指数
1
解决办法
3496
查看次数

C#选择ListBox中的所有项目 - 暂停事件处理

请参阅: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)

但它仍然会触发事件并且仍然需要很长时间来更新选择.

可以用一个简单的布尔标志解决这个问题,当我开始更新时,我会切换,但是如果有一种更简洁的解决方法,那就太棒了.

谢谢.

c# events event-handling winforms

4
推荐指数
1
解决办法
1428
查看次数

选择ListBox Winform控件中的所有项目

我正在尝试选择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)

但这似乎没有做任何事情.

.net c# winforms

3
推荐指数
1
解决办法
2698
查看次数

标签 统计

c# ×3

winforms ×3

.net ×1

event-handling ×1

events ×1

listbox ×1