3

我正在开发一个应用程序,在其中动态分配按钮的事件。现在问题是我希望获取按钮单击事件的所有事件,因为我希望删除以前的处理程序。

我尝试将事件处理程序设置为 null,例如:

Button.Click += null;

但是,我收到了一个运行时异常,无法分配 null。

我想知道已经附加到它的事件,以便我可以删除这些事件。

任何人都可以帮助我实现这一目标吗?

4

3 回答 3

0

您不能分配事件 - 只有附加 (+=) 和删除 (-=) 操作可用于客户端。

由于 += 和 -= 是在声明事件的类型之外的事件上允许的唯一操作,因此外部代码可以添加和删除事件的处理程序,但不能以任何其他方式获取或修改事件处理程序的底层列表.

于 2013-05-20T10:27:07.300 回答
0

一个很好的模式是在Action removeAll某处声明,所以你可以这样做:

button.Click += handler
removeAll += () => button.Click -= handler

这样,您只需要跟踪一个变量,并且您可以通过调用来清除所有内容removeAll(),而不是单独跟踪所有处理程序并且必须调用-=它们中的每一个。如果您有多个子类EventHandler要处理,这将特别方便,因为否则您必须使用多个列表来跟踪它们。

于 2014-02-07T14:23:46.970 回答
-1

你不能这样做(幸运的是。想象一下,一些外部代码删除了你的事件处理程序,你的代码只是停止以静默方式工作)。

(反射在这里不是一个选项,因为事件实现可能因类型而异)。通常,如果您想以这种方式删除所有事件处理程序,这意味着设计错误。

于 2013-05-20T10:24:51.830 回答