在循环中单击事件handelr

时间:2016-08-11 08:04:23

标签: c# .net

我在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;

1 个答案:

答案 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