2012-10-03 81 views
1

我在表单加载期间使用了一些递归函数。我以编程方式在控件上附加事件处理程序。由于递归功能,事件处理程序会多次挂钩到控件。我想从这些控件中删除所有处理程序。如何从C#中的控件中删除所有事件处理程序.net

例如,我在文本框中添加了按键,keydown,gotfocus等事件。我想删除所有这些处理程序。如何实现它?

+1

可能重复的:http://stackoverflow.com/questions/91778/how-to-remove-所有事件处理程序,从控制 –

+0

以及它只删除点击事件。我想从控件中删除所有事件。我该怎么做 ? –

+1

听起来好像多个处理程序不是有意的...不是不想在第一个地方添加多个处理程序? –

回答

1

如果loEventHandler是您先前订阅过某个事件的事件处理程序(例如单击),则可以通过执行loBox.Click -= loEventHandler;将其删除。

通过将事件设置为null,也可以在私有范围内清除事件MyEvent = null;但这对于公共范围不起作用。

+0

我期待删除所有事件。如果我添加更多的处理程序,可能会很麻烦,超过5,6。所以我想一次删除所有。 –

0

由于事件是特殊类型的代表,不允许用户互相干扰,因此您无法从“外部”世界中完成。

+0

方法私人无效RemoveClickEvent(按钮b)在这篇文章http://stackoverflow.com/questions/91778/how-to-remove-all-event-handlers-from-a-control做的工作,但它只能删除点击事件。 –

+0

@NitinKabra:那么,这是一种很好的方式来完成工作;) – BlackBear

+0

啊。哈克反射。我想它是有效的,只是替换你想用的'Click' –

0

为了避免单个事件被多次注册,你可以添加一个属性包装这样

public event EventHandler<EventArgs> _event; 
    public event EventHandler<EventArgs> PublicEvent 
    { 

     add 
     { 
      if (_event == null) 
       _event += value; 
     } 

     remove 
     { 
      _event -= value; 
     } 
    } 
相关问题