2011-01-05 35 views
1

前言C#附着事件處理與附加參數

我有暴露事件的OnClick(對象發件人,EventArgs的)一個視窗形式按鈕。 在我的應用程序可以通過使用經典的事件處理的C#技術處理這個問題:

// Button Creation 
Button button = new Button(); 
button.Click += MyEventHandler; 

然後Windows窗體問我有以下簽名的處理程序:

public void MyEventHandler(object sender, EventArgs e) { } 

假設我想使用lambda表達式要做到這一點,我可以使用以下語法:

button.Click += (sender, args) => 
{ 
    // execute the code 
}; 

這樣做的缺點是,我不能從Lambda表達式退訂。

問題

我想要做的是有一個實用工具類,讓我來處理任何Click事件加上使用額外的行動作爲參數。所以我想寫這樣的東西:

button.Click += MyUtility.Click(() 
    => { 
     // the custom code the Click event will execute 
    }) 

我可以做到這一點嗎?

+2

當你已經有解決方案時,爲什麼要經歷所有這些?如果您需要取消訂閱,請不要使用lambda表達式,很簡單。 – 2011-01-05 20:12:02

+0

你根本沒有回答這個問題... – Raffaeu 2011-01-05 20:14:16

回答

4

您可以將lambda表達式分配給本地變量或字段。

例如:

EventHandler handler = (sender, args) => 
{ 
    // execute the code 
}; 

button.Click += handler; 
button.Click -= handler; 

如果你想在處理器中退訂,你需要分配給handlernull,然後到拉姆達,避免明確分配的問題。

+0

好點!謝謝 – Raffaeu 2011-01-05 20:14:56