C#EventHandler,参数更改其值

时间:2014-10-03 09:40:46

标签: c# event-handling

我有一个表,当用户输入它时会不断增加它的大小,每行都有一个'X'标签来删除它们。

table.RowCount总是是最新的,所以我有一个函数〜就像每次创建一个新行时执行的那样:

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

问题是所有removeLabel的总是调用具有相同参数值的click事件,即table.RowCount 不是我创建它们的那个,但值当前有,所以我总是删除最后一行。

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

如何为每个removeLabel保存固定值?

2 个答案:

答案 0 :(得分:2)

是;这就是发生与词法闭包。您实际捕获的唯一内容是隐式this - 在调用委托时计算表达式this.table.RowCount的值,调用委托的每个时间

如果您想捕获快照: 捕获快照

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

答案 1 :(得分:0)

removeLabel.Tag = table.RowCount;

然后在事件处理程序中获取Tag值