参数正在更改其值的C#事件处理程序

本文关键字:事件处理 程序 参数 | 更新日期: 2023-09-27 18:25:23

我有一个表,随着用户输入它们,它的大小不断增加,每行都有一个"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事件,即表。RowCount不是我创建它们的那个,但值当前为,所以我总是删除最后一行。

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

如何将固定值保存到每个removeLabel?

参数正在更改其值的C#事件处理程序

是;这就是在词法闭包中发生的情况。这里实际捕获的唯一内容是隐式this——表达式this.table.RowCount的值在调用委托时求值,每次调用委托时求值。

如果要捕获快照:捕获快照

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

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