我在表单加载期间使用了一些递归函数。我以编程方式在控件上附加事件处理程序。由于递归功能,事件处理程序会多次挂钩到控件。我想从这些控件中删除所有处理程序。如何从C#中的控件中删除所有事件处理程序.net
例如,我在文本框中添加了按键,keydown,gotfocus等事件。我想删除所有这些处理程序。如何实现它?
我在表单加载期间使用了一些递归函数。我以编程方式在控件上附加事件处理程序。由于递归功能,事件处理程序会多次挂钩到控件。我想从这些控件中删除所有处理程序。如何从C#中的控件中删除所有事件处理程序.net
例如,我在文本框中添加了按键,keydown,gotfocus等事件。我想删除所有这些处理程序。如何实现它?
如果loEventHandler
是您先前订阅过某个事件的事件处理程序(例如单击),则可以通过执行loBox.Click -= loEventHandler;
将其删除。
通过将事件设置为null,也可以在私有范围内清除事件MyEvent = null;
但这对于公共范围不起作用。
我期待删除所有事件。如果我添加更多的处理程序,可能会很麻烦,超过5,6。所以我想一次删除所有。 –
由于事件是特殊类型的代表,不允许用户互相干扰,因此您无法从“外部”世界中完成。
方法私人无效RemoveClickEvent(按钮b)在这篇文章http://stackoverflow.com/questions/91778/how-to-remove-all-event-handlers-from-a-control做的工作,但它只能删除点击事件。 –
@NitinKabra:那么,这是一种很好的方式来完成工作;) – BlackBear
啊。哈克反射。我想它是有效的,只是替换你想用的'Click' –
为了避免单个事件被多次注册,你可以添加一个属性包装这样
public event EventHandler<EventArgs> _event;
public event EventHandler<EventArgs> PublicEvent
{
add
{
if (_event == null)
_event += value;
}
remove
{
_event -= value;
}
}
可能重复的:http://stackoverflow.com/questions/91778/how-to-remove-所有事件处理程序,从控制 –
以及它只删除点击事件。我想从控件中删除所有事件。我该怎么做 ? –
听起来好像多个处理程序不是有意的...不是不想在第一个地方添加多个处理程序? –