我正在定义一个wpf窗口,其中包含一些以编程方式定义的文本框和复选框。 添加它们之后,我想检查是否所有文本框和复选框都已填满。 要为文本框执行此操作,我将使用lamda表达式定义事件:
var mw = new MyWindow();
mw.KeyDown += (senderEvent, args) =>
{
cycle on all windows and when it's a TEXTBOX or a COMBOBOX analyze if it's empty or not.
That is a lot of code which I wouldn't not replicate nor use an external routine
}
但是当关闭组合框时,如何将相同的代码关联起来? 最好的方法是将上面的代码更改为(伪代码):
mw.AllEvents += (senderEvent, args) =>{ ... }
或
mw.KeyDown && mw.ComboBoxClose += (senderEvent, args) =>{ ... }
但这没有意义,因为窗口没有组合结合事件
这个或者在定义所有组合框时能够做到这样的事情:
newComboBox.ComboBoxClosed += (senderEvent, args) =>{ ...clone from mw.KeyDown }
提前谢谢
答案 0 :(得分:2)
方法签名不同,因此您无法做到这一点。但是,您可以将所有lambdas指向一个常用方法:
private void MyHandler()
{
//bulk of the work
}
//....
mw.KeyDown += (s,e) => MyHandler();
mw.ComboBoxClose += (s,e) => MyHandler();
如果你需要EventArgs,你可以通过它并对MyHandler
答案 1 :(得分:1)
您不能,他们是不同类型的代表。
DropDownClosed是一个EventHandler,而KeyDown是一个KeyEventHandler,所以当你编写lambda时,args在一个中键入EventArgs而在另一个中键入KeyEventArgs,他们只是从分配中推断它的类型。
如果它们都是EventHandlers或KeyEventHandlers,那么你可以将它保存到变量并分配该变量。