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