2014-10-03 63 views
0

我有一個表,隨着用戶輸入他們不斷增長的大小,並且每行都有一個'X'標籤來刪除它們。C#EventHandler的參數更改其值

table.RowCount始終是最新的,所以我有一個函數〜喜歡就是每次執行我創建一個新的行之後:

private void storeValues(){ 
    Label removeLabel = new Label(); 
    removeLabel.Text = "✗"; 
    removLabel.Click += new EventHandler((s, e) => removeLabel_Click(s, e, table.RowCount)); 
} 

的事情是,所有removeLabel的隨時撥打點擊事件具有相同的參數值這是表.RowCount 不是我創建它們的那個,但值目前有,所以我總是得到刪除的最後一行。

private void removeLabel_Click(object sender, EventArgs e, int index){ 
    removeFromTable(index); 
} 

如何將固定值保存到每個removeLabel?

+1

你試過存儲'table.RowCount'在一個局部變量和使用局部變量在lambda表達式? – Medinoc 2014-10-03 09:42:27

回答

2

是標籤值;這是發生與詞法關閉。您在這裏實際捕獲的唯一內容是隱含的this - 表示this.table.RowCount的值在調用委託時進行評估,每調用一次時間。

如果你要拍攝的快照:拍攝快照

var count = table.RowCount; 
removLabel.Click += new EventHandler((s, e) => removeLabel_Click(s, e, count)); 
0
removeLabel.Tag = table.RowCount; 

然後得到在事件處理