我有一个表,当用户输入它时会不断增加它的大小,每行都有一个'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保存固定值?
答案 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值