2013-02-06 91 views
1

好吧,我已經傳遞函數作爲參數傳遞給另一個功能是這樣的:如何通過功能參數

someFunction(..., passFunc); 
passFunc(){ MessageBox.Show("Message"); } 
private void someFunction(..., Func<int> f) { f(); } 

這一切正常。我將「passFunc」作爲參數傳遞給「someFunction」,然後調用該參數(「f()」)。然後我得到了帶有文本「消息」的消息框。好。

在程序的後期版本中,當我點擊特定按鈕的時候調用函數「passFunc」... 然後我希望獲得文本。我通常這樣做:((Button)sender).Text;。但在這種情況下,我不能這樣做,因爲我在這個「passFunc」中沒有參數。

我該怎麼做?所以,這「passFunc」的樣子:passFunc(object sender, EventArgs e)

然後我就可以做到這一點:

passFunc(object sender, EventArgs e) 
{ 
    MessageBox.Show(((Button)sender).Text); 
} 

這裏代碼:http://pastie.org/6079188

+0

爲什麼你想要按鈕上的文字? 'Func func =(sender,e)=> {return(sender as Control).Text;}' –

回答

1

如果你想通過輸入到FUNC使用這種通用型重載:

Func<string, int> passFunc 

編輯:

你叫passFunc這樣

passFunc("some input"); 

EDIT2:

passFunc(object sender, EventArgs e)不能與Func一起使用,因爲它可能有一個voi d返回類型。 然後您必須使用Action<object, EventArgs>

0

你爲什麼不訂閱passFunc到該按鈕的事件處理程序? 這將是這個樣子 button1.Click += new EventHandler(passFunc) 然後passFunc將

void passFunc(object sender, EventArgs e) 
{ 
    MessageBox.Show((sender as Button).Text); 
} 

我不知道這是否是你想實現什麼,但它可能工作。

+0

不,這不起作用:/ – Clem