如何确定某个特定代表是否已分配给某个活动?

我在winform上有一个命令按钮。 所以,如果我有类似的东西:

myButton.Click += MyHandler1; myButton.Click += MyHandler2; myButton.Click += MyHandler3; 

如何判断是否已将任何特定的MyHandler添加到Click事件中,以便它不会再添加到我的代码中的其他位置?

我已经阅读了如何使用GetInvocationList()来获取自己的事件信息。 但是在尝试使用各种组合获取命令按钮的项目时出错。 它说,

“事件’System.Windows.Forms.Control.Click’只能出现在+ =或 – =的左侧。”

我错过了什么?

[编辑] – 我想强调艾哈迈德指出的这个问题 。 这是一个kludge,应该更容易恕我直言,但看起来它可能只是工作。

如果您对已添加的处理程序有疑问,请将其删除并重新添加。 如果您的处理程序未首先添加,则会忽略您的删除。

 myButton.Click -= MyHandler1; myButton.Click += MyHandler1; 

您还可以创建一个附加到事件的方法,并确保代码只运行一次。

 private bool handlersAdded; private void AddHandlers() { if (this.handlersAdded) return; myButton.Click += MyHandler1; this.handlersAdded = true; } 

GetIvocationList的使用只能在事件的所有者(在你的情况下是myButton)中完成,这是事件背后的一个想法(而不是委托)。

像Slugster说的那样,你无法从myButton外部检查调用列表,但是你可以在添加之前尝试删除MyHandler#。