The sample code below will remove all Click events from button1

public partial class Form1 : Form
{
        public Form1()
        {
            InitializeComponent();

            button1.Click += button1_Click;
            button1.Click += button1_Click2;
            button2.Click += button2_Click;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Hello");
        }

        private void button1_Click2(object sender, EventArgs e)
        {
            MessageBox.Show("World");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            RemoveClickEvent(button1);
        }

        private void RemoveClickEvent(Button b)
        {
            FieldInfo f1 = typeof(Control).GetField("EventClick", 
                BindingFlags.Static | BindingFlags.NonPublic);
            object obj = f1.GetValue(b);
            PropertyInfo pi = b.GetType().GetProperty("Events",  
                BindingFlags.NonPublic | BindingFlags.Instance);
            EventHandlerList list = (EventHandlerList)pi.GetValue(b, null);
            list.RemoveHandler(obj, list[obj]);
        }
    }
}

or

void OnFormClosing(object sender, FormClosingEventArgs e)
{
    foreach(Delegate d in FindClicked.GetInvocationList())
    {
        FindClicked -= (FindClickedHandler)d;
    }
}

or

    Directly no, in large part because you cannot simply set the event to null.

    Indirectly, you could make the actual event private and create a property around it that tracks all of the delegates being added/subtracted to it.

    Take the following:

    List<EventHandler> delegates = new List<EventHandler>();

    private event EventHandler MyRealEvent;

    public event EventHandler MyEvent
    {
        add
        {
            MyRealEvent += value;
            delegates.Add(value);
        }

        remove
        {
            MyRealEvent -= value;
            delegates.Remove(value);
        }
    }

    public void RemoveAllEvents()
    {
        foreach(EventHandler eh in delegates)
        {
            MyRealEvent -= eh;
        }
        delegates.Clear();
    }

 

相关文章:

  • 2021-09-03
  • 2021-11-24
  • 2021-11-22
  • 2022-03-05
  • 2022-01-08
  • 2022-12-23
  • 2021-07-08
  • 2021-12-08
猜你喜欢
  • 2022-12-23
  • 2021-07-01
  • 2021-07-05
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-04
相关资源
相似解决方案