参数正在更改其值的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?
是;这就是在词法闭包中发生的情况。这里实际捕获的唯一内容是隐式this
——表达式this.table.RowCount
的值在调用委托时求值,每次调用委托时求值。
如果要捕获快照:捕获快照
var count = table.RowCount;
removLabel.Click += new EventHandler((s, e) => removeLabel_Click(s, e, count));
removeLabel.Tag = table.RowCount;
然后在事件处理程序中获取Tag值