イベントからすべてのイベントハンドラーを削除する方法 質問する

イベントからすべてのイベントハンドラーを削除する方法 質問する

コントロールに新しいイベントハンドラを作成するには、次のようにします。

c.Click += new EventHandler(mainFormButton_Click);

またはこれ

c.Click += mainFormButton_Click;

イベントハンドラを削除するには次のようにします

c.Click -= mainFormButton_Click;

しかし、イベントからすべてのイベント ハンドラーを削除するにはどうすればよいでしょうか?

ベストアンサー1

私は解決策を見つけましたMSDN フォーラム以下のサンプル コードは、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]);
    }
}

おすすめ記事