当前位置:  开发笔记 > 编程语言 > 正文

在Windows窗体中暂停控件事件的最佳方法?

如何解决《在Windows窗体中暂停控件事件的最佳方法?》经验,为你挑选了2个好方法。

这似乎是一个非常简单和非常普遍的问题.我能想到的最简单的例子是:

该表单有五个复选框,上面有一个"check all/check none"复选框.当用户选择检查所有复选框时,我切换"孩子"的状态 - 显然我不想触发所有孩子的检查事件,直到我完成设置所有复选框.

我找不到表单范围的暂停控制事件.如果我只是想念它那么简单的回答.除非我缺少一个简单的解决方案,暂停表单控制事件的最佳方法(最佳实践?已接受的解决方案?)是什么?



1> Rob Stevenso..:

我之前遇到过这种情况,通常看到人们会这样做:

/*SNIP*/

private bool isMassUpdate;

public void Check1_Check(object sender, EventArgs e)
{
   if(!isMassUpdate)
   {
       do some stuff
   }
}

/*SNIP*/

您也可以分离并重新附加事件处理程序,但是,我被告知这可能是内存泄漏的来源.

有关内存泄漏和事件处理程序的信息:它们与附加和分离没有直接关联,但我们在其中一个应用程序中看到,对继承树的事件处理程序的错误引用会导致它.

.NET内存泄漏案例研究:制作内存Baloon的事件处理程序

在事件处理程序和内存泄漏



2> Garo Yeriaza..:

在这些情况下,我使用计数器而不是使用具有暂停事件的布尔值的方法。当计数> 0时,将暂停事件;当计数= 0时,将继续事件。如果我有多个事情可能要求中止事件,这将有助于解决该问题。

另一个有用的事情是,如果我需要在一个块中暂停事件,则创建一个IDisposposable的小帮助程序类,该类可以在“使用”块(在C#中)中使用,这样我就不会忘记减少计数器超出范围。

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有