删除使用 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);
}
我有一个添加了事件的控件。但是,我需要将一些额外的参数传递给事件方法,所以我使用 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);
}