在C#里面我给一个事件指定了几个响应函数,
怎么清除这些事件响应函数??
在没有获得这些响应函数的引用的时候。

解决方案 »

  1.   


                this.Click += new EventHandler(Form1_Click);
                this.Click -= new EventHandler(Form1_Click);
      

  2.   

    this.tabTool.SelectedIndexChanged -= new System.EventHandler(this.tabTool_SelectedIndexChanged);
      

  3.   

    控件.事件 -= new EventHandler(委托方法);
      

  4.   

    利用反射修改它的委托"链表"看下面的例子
    先给Button5加几个
    this.button5.Click += new EventHandler(button5_Click);
    this.button5.Click += new EventHandler(button5_Click);
    this.button5.Click += new EventHandler(button5_Click);
    this.button5.Click += new EventHandler(button5_Click);
    this.button5.Click += new EventHandler(button5_Click);删除几个PropertyInfo pi = (typeof(System.Windows.Forms.Button)).GetProperty("Events", 
    BindingFlags.Instance | BindingFlags.NonPublic);
    EventHandlerList ehl = (EventHandlerList)pi.GetValue(button5, null);
    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++)
        {
            if (i < 3)
            {
                 this.button5.Click -= (EventHandler)dels[i];
            }
        } 
    }
      

  5.   

    this.Click -= new EventHandler(Form1_Click);