3

我正在尝试选择 ListBox 中的所有项目并为此目的制作了此扩展方法:

    public static void SetSelectedAllItems(this ListBox ctl)
    {
        for (int i = 0; i < ctl.Items.Count; i++)
        {
            ctl.SetSelected(i, true);
        }
    }

问题是如果我在 ListBox 中有很多项目,完成这项任务需要很长时间,我可以看到 ListBox 如何自动向下滚动并选择项目。

有没有办法暂时暂停控件的更新,以便任务更快地完成?我尝试使用:

ctl.SuspendLayout();
  for (int i = 0; i < ctl.Items.Count; i++)
  ...
ctl.ResumeLayout();

但这似乎没有任何作用。

4

1 回答 1

8

调用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();
}

您说您尝试过调用SuspendLayoutand ResumeLayout,但这只会影响控件的布局事件。当您想要更改控件相对于其他控件的位置时,可以使用这对方法,例如设置SizeLocationAnchorDock属性时。

于 2013-03-13T23:28:04.020 回答