从事件获取事件处理程序?

时间:2012-10-09 13:47:50

标签: c# .net events delegates

  

可能重复:
  Is it possible to “steal” an event handler from one control and give it to another?

有没有办法从事件中获取事件处理程序的引用?

例如:

EventHandler evt = btn.Click; // or another way ?

(此处EventHandler是委托,而Click是Button的事件)

2 个答案:

答案 0 :(得分:1)

如果您定义了事件,并且访问它的代码在同一个类中(即未派生),那么您可以访问它并获取调用列表。

MulticastDelegate m = (MulticastDelegate)MyEvent;  

var list = m.GetInvocationList();  

foreach(Delegate d in list)  
{  
    // look at the delegate
}  

对于您想要访问无法修改其代码的类中定义的事件的调用列表的情况...

答案 1 :(得分:-1)

您可以尝试使用此代码 - 只需casting

var result = (EventHandler)control.Click;
Console.WriteLine(result.Method.Name);