Type  t  =  this.button1.GetType(); 
object  eventClick  =  t.InvokeMember("Click",System.Reflection.BindingFlags.Public|System.Reflection.BindingFlags.GetField|System.Reflection.BindingFlags.Static|System.Reflection.BindingFlags.FlattenHierarchy,null,null  ,  null);  

// object  eventClick = "Click";
  System.Delegate  click  =  this.Events[eventClick];  
提示找不到Click事件我只是想知道一个事件同哪些方法有关联

解决方案 »

  1.   

    System.Delegate  click  =  this.Events[eventClick]; 改为:System.Delegate void clickDelegate(Object sender, EventArgs args);
    public event clickDelegate click;
    click+= this.Events[eventClick];
      

  2.   

    you cannot call YourEvent.GetInvocationList outside the class where the event is defined, not even in the subclass
      

  3.   

    using System;
    using System.Reflection;class TestEvent
    {  public event EventHandler MyEvent;
      public void Test()
      {
    if (MyEvent != null)
    MyEvent(this, EventArgs.Empty);
      }  static void Test1(Object sender, EventArgs e)
      {
    Console.WriteLine("Test1");
      }  static void Test2(Object sender, EventArgs e)
      {
    Console.WriteLine("Test2");
      }  void Test3(Object sender, EventArgs e)
      {
    Console.WriteLine("Test3");
      }  static void Main()
      {
    TestEvent te = new TestEvent();
    te.MyEvent += new EventHandler(Test1);
    te.MyEvent += new EventHandler(Test2);
    te.MyEvent += new EventHandler(te.Test3); te.Test(); FieldInfo ei = te.GetType().GetField("MyEvent", BindingFlags.NonPublic|BindingFlags.Instance);
    if (ei != null)
    {
    object o = ei.GetValue(te);
    Console.WriteLine("{0}", o.GetType().Name);
    MethodInfo mi = o.GetType().GetMethod("GetInvocationList");
    if (mi != null)
    {
      Delegate[] list = (Delegate[])mi.Invoke(o,null);
    foreach (Delegate g in list)
    Console.WriteLine("target:{0}, method:{1}", g.Target, g.Method.Name);
    }

    }
      }
    }