2016-02-26 65 views
2

我dinamically定义一个wpf窗口与一些文本框和复选框以编程方式定义。 添加它们之后,我想检查是否所有文本框和复选框都已填充。 要做到这一点的文本框,我有LAMDA表达式定义的事件:如何分配一个lamba表达式事件到另一个事件

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) =>{ ... } 

但是这没有任何意义,因为一个窗口还没有comboboxclose事件

可以在本或者当定义所有组合框以能够做类似的事情时:

newComboBox.ComboBoxClosed += (senderEvent, args) =>{ ...clone from mw.KeyDown } 

谢谢您提前

回答

1

你不能,他们是不同类型的代表。

DropDownClosed是一个EventHandler,而KeyDown是一个KeyEventHandler,所以当你编写你的lambda时,args在一个类型中键入EventArgs,在其他类型中键入KeyEventArgs,它们只是从分配中推断出它的类型。

如果它们都在EventHandlers或KeyEventHandlers中,那么您可以将它保存到一个变量并分配该变量。

2

方法签名是不同的,所以你不能这样做。但是,你可以点朝着一个共同的方法,所有的lambda表达式:

private void MyHandler() 
{ 
    //bulk of the work 
} 

//.... 
mw.KeyDown += (s,e) => MyHandler(); 
mw.ComboBoxClose += (s,e) => MyHandler(); 

如果需要EventArgs的,你可以通过它传递和做一些该类型开关的MyHandler

+0

的窗口不是一个组合框所以它没有mw.ComboBoxClose事件! – Patrick

+0

哦,我明白了。您必须手动传递/重新从“MyWindow”中提升您的ComboBoxClose。这是相当混乱 – Jonesopolis

+0

不是很清楚你现在正在提出什么... – Patrick

相关问题