WinForms:暂时禁用事件处理程序

Geo*_*rge 30 c# winforms

如何在WinForms中暂时禁用事件处理程序?

Meh*_*ari 51

也许,最简单的方法(不需要取消订阅或其他东西)是声明一个布尔值并在处理程序的开头检查它:

bool dontRunHandler;

void Handler(object sender, EventArgs e) {
   if (dontRunHandler) return;

   // handler body...
}
Run Code Online (Sandbox Code Playgroud)

  • 这很简单,但如果你经常使用它,代码就会变得一团糟. (7认同)

Ada*_*son 50

从什么角度禁用?如果要从处理程序上的委托列表中删除范围内的方法,则可以执行以下操作:

object.Event -= new EventHandlerType(your_Method);
Run Code Online (Sandbox Code Playgroud)

这将从委托列表中删除该方法,您可以稍后重新附加该方法

object.Event += new EventHandlerType(your_Method);
Run Code Online (Sandbox Code Playgroud)

  • 我认为你的意思是your_Method而不是your_Method().从C#2.0开始,您也不需要"new EventHandlerType"部分 - 只需object.Event + = yourMethod; 和object.Event - = yourMethod; (6认同)