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

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

将参数传递给EventHandler

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

但是这个事件应该在第一次满足条件后才会被解雇。

这样做不起作用:

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

所以问题是,有没有办法去除这个方法?

我见过这个:

如何从控件中删除所有事件处理程序

但是我无法在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);
    }
链接地址: http://www.djcxy.com/p/51449.html

上一篇: Remove eventHandler that was added using lambda expression

下一篇: "Clearing" all chained methods in delegate c#