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

时间:2011-05-23 00:41:30

标签: c# winforms events event-handling

请参阅:ListBox select all items

我有一个ListBox,我需要选择所有项目。唯一的问题是,我在ListBox.SelectIndexChanged事件上有事件处理程序,它会做一些CPU密集型的事情。在循环中选择循环中的项会导致程序在循环的每次迭代中触发SelectIndexChanged事件。

我已将循环包含在Suspend / ResumeLayout()中,如下所示:

SuspendLayout();

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

ResumeLayout();

但它仍会触发事件,但仍需要很长时间来更新选择。

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

感谢。

1 个答案:

答案 0 :(得分:7)

另一个选项(除了使用布尔标志)将在循环之前取消注册事件处理程序并在循环之后重新注册。

listBox.SelectIndexChanged -= listBox_selectIndexChanged;

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

listBox.SelectIndexChanged += listBox_selectIndexChanged;