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

use*_*010 3 .net c# winforms

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

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

Sco*_*lie 7

在设置该控件的属性时,调用BeginUpdateEndUpdate方法以阻止控件的绘制/呈现.

这是修改后的代码:

public static void SetSelectedAllItems(this ListBox ctl)
{
    ctl.BeginUpdate();

    for (int i = 0; i < ctl.Items.Count; i++)
    {
        ctl.SetSelected(i, true);
    }

    ctl.EndUpdate();
}
Run Code Online (Sandbox Code Playgroud)

你说,你已经打过电话SuspendLayoutResumeLayout,但只影响控件的布局事件.当你想要的位置相对控制的切换到其他控件,当您将这副方法使用Size,Location,Anchor,或Dock性质.