c# for 循环,然后单击事件处理程序
本文关键字:单击 事件处理 程序 然后 for 循环 | 更新日期: 2023-09-27 17:57:17
如何在每次迭代中使用一个单独的事件处理程序,而无需对函数进行硬编码?
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());
}
您需要将迭代器复制到局部变量中,以便委托正确捕获它:
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
}
在原始代码段中,委托说"返回变量的当前值",即 100。不是:"创建时的值"。阅读闭包以获得对此的深入解释。我会深入推荐Jon Skeets C#。
在 c# 5.0 中,这已针对 foreach
循环进行了更改,而不是for i;
循环。