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