c#for-loop和Click Event Handler

时间:2016-07-16 11:53:02

标签: c# picturebox eventhandler

如何在不对代码进行硬编码的情况下,每次迭代使用一个单独的事件处理程序?

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());
}

1 个答案:

答案 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;循环更改了。