制造虚空动态

时间:2014-04-28 19:57:24

标签: c# winforms events dynamic void

我创建了一些动态的图片框,但我不知道如何对点击进行单独操作。

PictureBox[] app=new PictureBox[file.Length];
int i = 0, prev=20;
foreach(string element in file)
{
    app[i] = new PictureBox();
    app[i].BackgroundImage = Image.FromFile(element.Remove(element.Length - 3) + "png");
    app[i].Location = new Point(prev, 85);
    app[i].Size = new Size(100, 100);
    app[i].Name = "test" + i;
    app[i].Click += new EventHandler(run(element, dir));

    this.Controls.Add(app[i]);

    i++; 
    prev += 20;
}

private void run(string element, string dir)
{
      MessageBox.Show(element);
}

那我怎么能这样做呢。请帮忙!谢谢!

3 个答案:

答案 0 :(得分:6)

这是你想要的吗?

app[i].Click += (sender, args) => { MessageBox.Show(element);};

答案 1 :(得分:0)

试试这个

app[i].Click += (s, e) => { run(element,dir); };

答案 2 :(得分:0)

尽量避免在foreach循环中使用委托/函数,如果这样做,请使用对象的副本,而不是循环语句中的变量。

var elementCopy = element;
...
app[i].Click += (sender,evt) => run(elementCopy,dir);

如果您直接使用该元素,则有可能始终使用枚举中的最后一个元素作为委托

修改:请参阅:Using the iterator variable of foreach loop in a lambda expression - why fails?

它解释了为什么你应该更深入地做我所说的。