2013-07-27 51 views
2

我使用的框架2.0版(不能使用4.0),並分配一個事件處理程序的下列方法來動態創建的按鈕不起作用:點擊事件處理程序:方法名稱的預期和其他錯誤

deleteButton.Click += (object sender, EventArgs e) => DeleteAnswer(sender, e, toDelete); 

錯誤: 'lambda表達式' 不能用它不是ISO的一部分 - 2 C#

因此,一些搜索後,我試着這樣說:

deleteButton.Click += new System.EventHandler(DeleteAnswer(sender, e, toDelete)); 

錯誤:方法名稱預計

然後是這樣的:

deleteButton.Click += DeleteAnswer(sender, e, toDelete); 

錯誤:無法隱式轉換類型 '無效' 到 'System.EventHandler'


這是一個我的部分代碼:

public partial class Question : System.Web.UI.Page 
{ 

    protected void Page_Load(object sender, EventArgs e) 
    { 
      //Some Codes Here 
      if(//Some Condition) 
      { 
       Button deleteButton = new Button(); 
       deleteButton.Click = //Event Handler Here 
      } 
    } 

    protected void DeleteAnswer(object sender, EventArgs e, String answer) 
    { 
    } 

} 

什麼是分配事件處理程序並傳遞參數的正確方法?

更新

enter image description here

+0

僅僅因爲你使用.NET 2爲目標,並不意味着你必須使用C#2 - 它看起來像你有你的構建設置不必要地限制你。 –

+0

爲什麼不直接使用EventArgs參數來傳遞'toDelete' – Ric

+0

@JonSkeet如果我弄錯了,請原諒我,我該怎麼做?另外,我使用2.0,因爲託管服務器設置爲2.0(不能更改)。 –

回答

3

如果您不需要senderEventArgs參數,您可以創建一個delegate其調用你的方法。

deleteButton.Click += delegate { DeleteAnswer(toDelete); }; 

protected void DeleteAnswer(string answer) 
{ 
} 

否則添加簽名

deleteButton.Click += delegate(object s, EventArgs e) { DeleteAnswer(s, e, toDelete); }; 

protected void DeleteAnswer(object sender, EventArgs e, string answer) 
{ 
} 
+0

我會給你+100,如果我可以,謝謝,很多。 –

+0

@AliBassam不客氣:) – keyboardP

0

您需要提供一個delegate namenot its signature -

deleteButton.Click+= ClickHandler; 

protected void ClickHandler(object sender, EventArgs e) 
{ 
    DeleteAnswer(sender, e, todelete); 
} 

protected void DeleteAnswer(object sender, EventArgs e, String answer) 
{ 
} 
+0

**錯誤:沒有重載'DeleteAnswer'匹配委託'System.EventHandler'** - 我也需要傳遞一個參數。 –

+0

從第一種方法我可以看到 - 你正在調用按鈕事件處理程序,然後用'todelete'參數調用'DeleteAnswer'。所以,我已經按照相同的方式編輯了答案。 –

+0

您更新後的答案沒有任何錯誤,但我如何能夠從分配點擊事件的時刻傳遞參數?換句話說,就目前的代碼而言,todelete的價值是什麼?此值必須來自頁面加載方法以及創建按鈕。 –

相關問題