我现在有个事件,如:DoubleClick += new System.EventHandler(this.Form1_DoubleClick);
如何才能取消事件和EventHandler的挂钩呢?是不是如下:
DoubleClick -= new System.EventHandler(this.Form1_DoubleClick);如果OK,那么我现在想问的是,如果我不清楚DoubleClick 事件究竟与哪个或 哪几个EventHandler挂钩了,我如何才能注销掉所有挂在DoubleClick 上面的EventHandler?

解决方案 »

  1.   

    很笨的方法:可以把所有有可能的EventHandler都注销一下,即使没有挂钩也不会有什么副作用好像。
    学习学习
      

  2.   

    需要使用到反射了
    using System;
    using System.Reflection;
    using System.Security;class MyEventExample
    {
        public static void Main()
        {  
            try
            {            // Creates a bitmask based on BindingFlags.
                BindingFlags myBindingFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
                Type myTypeBindingFlags = typeof(System.Windows.Forms.Button);
                EventInfo myEventBindingFlags = myTypeBindingFlags.GetEvent("DoubleClick", myBindingFlags);
                if(myEventBindingFlags != null)
                {
                    Console.WriteLine("Looking for the Click event in the Button class with the specified BindingFlags.");
                    Console.WriteLine(myEventBindingFlags.ToString());
                }
                else
                    Console.WriteLine("The Click event is not available with the Button class.");
            }
            catch(SecurityException e)
            {
                Console.WriteLine("An exception occurred.");
                Console.WriteLine("Message :"+e.Message);
            }
            catch(ArgumentNullException e)
            {
                Console.WriteLine("An exception occurred.");
                Console.WriteLine("Message :"+e.Message);
            }
            catch(Exception e)
            {
                Console.WriteLine("The following exception was raised : {0}",e.Message);
            }
        }
    }