我创建了一些动态的图片框,但我不知道如何对点击进行单独操作。
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);
}
那我怎么能这样做呢。请帮忙!谢谢!
答案 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?
它解释了为什么你应该更深入地做我所说的。