要在控件上创建新的事件处理程序,您可以执行此操作
c.Click += new EventHandler(mainFormButton_Click);
或这个
c.Click += mainFormButton_Click;
并删除事件处理程序,您可以执行此操作
c.Click -= mainFormButton_Click;
但是,如何从事件中删除所有事件处理程序?
我在MSDN论坛上找到了解决方案。以下示例代码将从中删除所有Click事件button1。
Click
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]); } } }