我試圖將EventHandler掛接到動態創建的對象上。在這個示例中,我使用簡單的Windows.Net TabControl來包含動態對象。爲了簡單起見,我使用Button和Click事件。 主要點是按鈕點擊每個TabPage應該產生不同的輸出。動態對象上的C#事件
public partial class Form1 : Form
{
int letter = 65;
private void simpleButton1_Click(object sender, EventArgs e)
{
TabPage newPage = new TabPage();
tabControl1.TabPages.Add(newPage);
Button btn = new Button();
newPage.Controls.Add(btn);
btn.Click += (object s, EventArgs ee) =>
{
// Button on FirstPage should produce "Test A"
// Button on SecondPage should produce "Test B"
Debug.WriteLine("Test " + (char)letter);
};
letter++;
}
}
然而,我點擊任何頁面上取其按鈕產生最後一頁的輸出(即4個TabPage,所有的按鈕點擊產生「測試d」)。它感覺好像參考指針按鈕btn指向每個頁面上的按鈕的所有實例。
我的假設:
Button btn = new Button();
不會每次指針BTN指向按鈕的新實例,該行執行?在這個意義上說:
btn.Click += (object s, EventArgs ee) =>
btn.Click應該是新創建的Button實例的EventHandler,對不對?看起來好像指針btn仍然指向Button的所有實例。
請在這個問題上給我點啓發。先謝謝你。
非常感謝!我忘了聲明本地變量將複製其分配的值。它運作良好! – Suwandy