2016-02-26 23 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

相關問題