如何从C#.net中的Control中删除所有事件处理程序

时间:2012-10-03 17:46:02

标签: c# .net events

我在表单加载过程中使用了一些递归函数。我以编程方式在控件上附加事件处理程序。由于递归函数,事件处理程序多次挂钩到控件。我想从这些控件中删除所有处理程序。

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

3 个答案:

答案 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;
        }
    }