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

c# for 循环,然后单击事件处理程序

您需要将迭代器复制到局部变量中,以便委托正确捕获它:

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;循环。