如何获取控件的设置事件?

时间:2012-06-07 22:36:38

标签: c# events controls

可以通过C#代码获取设置为Control的方法/委托列表吗?让我解释一下.. 例如。

假设有这样的定义:

foo.Click += (a, b) => { ... }
//..
foo.Click += (A,B) => { ... }

一种megic方法:

var baa = foo.GetEvents("Click");

返回

baa[0]指向(a, b) => { ... }

baa[1]指向(A,B) => { ... }

我的风景:我制作动态事件并将其添加到循环内的某些控件中。我希望根据布尔值控制索引1的事件,将使用control.Click - = baa [1]或类似的东西删除。我希望这对你来说很明确。提前谢谢。

1 个答案:

答案 0 :(得分:2)

不,没有办法做到这一点。事件的目的是隐藏支持委托字段(严格来说,可能根本没有支持字段),因此您只能订阅或取消订阅该事件。

这样做的原因是订阅者(在观察者模式中也称为“观察者”)不应该知道其他订阅者,更不用说取消订阅它们了。如果你的邻居取消了对你喜欢的杂志的订阅,你会怎么说? ;)


编辑:实际上,一种方法,但它很丑陋且不可靠。假设您知道类如何存储其事件处理程序(通常是委托字段,但在Windows窗体中它是不同的),您可以使用私有成员上的反射来检索事件处理程序。