我在表单加载期间使用了一些递归函数。我以编程方式在控件上附加事件处理程序。由于递归函数,事件处理程序会多次与控件挂钩。我想从这些控件中删除所有处理程序。
例如。我在文本框中添加了 keypress、keydown、gotfocus 等事件。我想删除所有这些处理程序。怎么实现呢?
如果loEventHandler
是一个事件处理程序,您之前订阅了一个事件(例如 Click),您可以通过loBox.Click -= loEventHandler;
.
也可以通过将事件设置为 null 来清除私有范围内的事件,MyEvent = null;
但这不适用于公共范围。
你不能从“外部”世界做到这一点,因为事件是不允许订阅者相互干扰的特殊类型的代表。
为避免单个事件被多次注册,您可以像这样添加一个属性包装器
public event EventHandler<EventArgs> _event;
public event EventHandler<EventArgs> PublicEvent
{
add
{
if (_event == null)
_event += value;
}
remove
{
_event -= value;
}
}