我在for循环中调用了我的clickevent,但是当我点击我的时候 在这种情况下,PictureBox以新的形式打开,click事件是 多次重复,多个新表格继续开启
imagename= myRow["Photo"].ToString();
imagepath = imagename.Split(splitchar, StringSplitOptions.RemoveEmptyEntries);
for (int j = 0; j <= imagepath.Length-1;j++ )
{
if(imagepath[j]!=null){
string imagefinals = paths + imagepath[j];
pics[j].ImageLocation = imagefinals;
pics[j].SizeMode = PictureBoxSizeMode.StretchImage;
pics[j].Click += new System.EventHandler((s, ee) => LoadImage(s, e, imagefinals));
}
}
return;
答案 0 :(得分:0)
从评论中输入后,每次从数据库加载数据时,似乎都绑定了相同的事件处理程序,因此重复。
从您发布的代码开始,您似乎事先知道您拥有多少PictureBoxes
,您需要将事件处理程序绑定与数据绑定分开。
由于您已经在每个imagefinals
的{{1}}属性中拥有ImageLocation
的值,因此您无需将其传递给PictureBox
。
相反,您的LoadImage
方法应该如下所示(至少在它的开头):
LoadImage
现在,鉴于您已经知道有多少个图片框,在private void LoadImage(object sender, EventArgs e)
{
var pictureBox = sender as PictureBox;
if(pictureBox == null)
return;
var imageFinals = pictureBox.ImageLocation;
// rest of the method here...
}
方法中绑定事件处理程序:
FormLoad
否则,每当您添加新的protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
foreach(var pb in pics)
pb.Click += LoadImage;
}
时,都会指定PictureBox
事件处理程序,但请确保它不是从您使用的代码中调用的方法中贴强>
下一步是从您发布的方法中删除点击事件处理程序绑定:
Click