删除使用 lambda 表达式添加的 eventHandler

Remove eventHandler that was added using lambda expression

我有一个添加了事件的控件。但是,我需要将一些额外的参数传递给事件方法,所以我使用 lambda 表达式,就像这里描述的那样:

Pass parameter to EventHandler

comboBox.DropDown += (sender, e) => populateComboBox(sender, e, dataSource, selectedItem);

但是这个事件应该只在应该移除的条件之后第一次满足条件时触发。

这样做不起作用:

comboBox.DropDown -= (sender, e) => populateComboBox(sender, e, dataSource, selectedItem);

那么问题来了,有没有办法去掉这个方法?

我看过这个:

How to remove all event handlers from a control

但我无法让它为 ComboBox DropDown 事件工作。

它没有被删除的问题是因为你在删除它时给出了一个新的 lambda 表达式。您需要保留 Lambda 表达式创建的委托的引用以将其从控件中删除。

EventHandler handler = (x, y) => comboBox1_DropDown(x, y);
comboBox1.DropDown += handler;

它将像这样简单地工作:

comboBox1.DropDown -= handler;

通过反思:

    private void RemoveEvent(ComboBox b, EventHandler handler)
    {
        EventInfo f1 = typeof(ComboBox).GetEvent("DropDown");
        f1.RemoveEventHandler(b, handler);
    }