如何在不对代码进行硬编码的情况下,每次迭代使用一个单独的事件处理程序?
for (int i = 0; i < 100; i++)
{
//other code
PictureBox listItem = new PictureBox();
listItem.Click += new EventHandler((sender2, e2) => ListItemClicked(i));
//other code
}
private void ListItemClicked(int index)
{
MessageBox.Show(index.ToString());
}
答案 0 :(得分:3)
您需要将迭代器复制到局部变量中,以便委托正确捕获它:
for (int i = 0; i < 100; i++)
{
var idx = i;
//other code
PictureBox listItem = new PictureBox();
listItem.Click += new EventHandler((sender2, e2) => ListItemClicked(idx));
//other code
}
在原始代码中,代表说&#34;返回变量&#34;的当前值,即100。不:&#34;创建时的值&#34;。 阅读关闭以获得对此的深入解释。我非常推荐Jon Skeets C#。
在c#5.0中,foreach
循环已更改,但for i;
循环更改了。