删除使用lambda表达式

时间:2016-03-15 20:44:48

标签: c# lambda eventhandler

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

1 个答案:

答案 0 :(得分:2)

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

Event.create(name: "The function", 
             date: DateTime.new(2016,2,3,10,0,0,'+7'), 
             venue: Venue.create(name: "Speakeasy", address: "Lynwood Ave", zip_code: "30312"), 
             lineup: Lineup.create(:artist => Artist.create(name: "DJ Sliink", bio: "jersey club king")), 
             description: "free free free")

它的工作原理如下:

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

通过反思:

comboBox1.DropDown -= handler;