如何使用使用lambda表达式创建的相同事件处理程序订阅两个不同的事件?

时间:2017-09-20 10:17:28

标签: c# lambda combobox event-handling

参考我的旧问题 WPF How to assign the same event lambda expression to two different elements

我现在的需求略有不同。 我必须使用相同的lambda动作订阅不同类型的事件:

EventHandler action = (sender2,args) =>
{
    var cmbChanged = sender2 as ComboBox;
    //...check...
};


cmb.DropDownClosed += action;
cmb.PreviewKeyUp += action; // <----- compiler error here

但是编译器正确地说动作是System.EventHandler,而我需要System.Window.Input.KeyEventHandler

简而言之,当您点击鼠标并关闭组合以及通过键入选择值时,我必须检查某些条件。

1 个答案:

答案 0 :(得分:2)

由于委托类型不同,您不能 assign 直接添加它。但你可以简单地转发它:

cmb.DropDownClosed += action;
cmb.PreviewKeyUp += (sender, e) => action(sender, e);

由于e类型为KeyEventArgs,源自EventArgs,因此您可以将其传递给action