请问如何判断事件是否已订阅某一方法
例如:
button2.Click += new EventHandler(button2_Click);
这样判断button2的Click事件是否已订阅button2_Click这个事件处理方法

解决方案 »

  1.   

    用反射ropertyInfo pi = (typeof(System.Windows.Forms.Button)).GetProperty("Events", 
                    BindingFlags.Instance | BindingFlags.NonPublic);
    EventHandlerList ehl = (EventHandlerList)pi.GetValue(yourbutton, null);//这是你的Button
    FieldInfo fi = (typeof(Control)).GetField("EventClick", BindingFlags.Static | BindingFlags.NonPublic);
    Delegate d = ehl[fi.GetValue(null)];
    if (d != null)
    {
        System.Delegate[] dels = d.GetInvocationList();
        for (int i = 0; i < dels.Length; i++)
        {
            Console.WriteLine(dels[i].Method.Name);//这里会输出所有方法名称
        } 
    }
      

  2.   

    我觉得没有特别的需求情况下没必要知道所有的方法吧??
    你只要在加事件之前先-=就好了
    button2.Click -= new EventHandler(button2_Click); 
    button2.Click += new EventHandler(button2_Click); 
      

  3.   

     Delegate[] delDirectory = button2.Click.GetInvocationList();
                if (delDirectory != null && delDirectory.Length > 0)
                {
                    foreach (EventHandle handle in delDirectory)
                    {
                        if (handle == button2_Click)
                        {
                            //已注册
                        }
                        else
                        {
                            //未注册
                        }
                    }
                }
                else
                {
                    //未注册
                }
     
      

  4.   

     简单点话 注册事件 先移除 然后在注册
     或者可以到事件列表里面去判断是否存在该事件 例如 Zine_Alone 所说的
      

  5.   

    Delegate[] delDirectory = button2.Click.GetInvocationList();大哥,我的 button2.Click.没有GetInvocationList();这个方法啊
      

  6.   


    click没有这个方法,求真相
      

  7.   


    even要在 声明的 类 里才能 有这个 方法 ,就是说你要在button2 的类里 才能 用这个方法