删除使用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