1

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

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

4

3 回答 3

1

如果loEventHandler是一个事件处理程序,您之前订阅了一个事件(例如 Click),您可以通过loBox.Click -= loEventHandler;.

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

于 2012-10-03T17:51:03.580 回答
0

你不能从“外部”世界做到这一点,因为事件是不允许订阅者相互干扰的特殊类型的代表。

于 2012-10-03T18:00:09.690 回答
0

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

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

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

        remove
        {
            _event -= value;
        }
    }
于 2012-10-03T19:05:03.120 回答