Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将对象的数组号传递给事件处理程序_C#_Arrays - Fatal编程技术网

C# 将对象的数组号传递给事件处理程序

C# 将对象的数组号传递给事件处理程序,c#,arrays,C#,Arrays,我有一系列的图片盒 for(int i = 0; i<10; i++) { this.elevatorDoors[i] = new System.Windows.Forms.PictureBox(); } 但当事件发生时,我得到的只是数字10。例如,当我点击第四个图片框时,我想得到数字4 var tempValue = i; this.elevatorDoors[i].Click += new System.EventHandler((sender,e)=> t

我有一系列的图片盒

for(int i = 0; i<10; i++)
{ 
   this.elevatorDoors[i] = new System.Windows.Forms.PictureBox();
}
但当事件发生时,我得到的只是数字10。例如,当我点击第四个图片框时,我想得到数字4

var tempValue = i;
this.elevatorDoors[i].Click +=
      new System.EventHandler((sender,e)=> this.elevatorDoor_Click(sender,e, tempValue));

这会解决它的。因此,您必须确保在调用事件时使用循环迭代的当前值。离开循环后,该值将始终等于最后一个值。因此引入了存储当前迭代的tempValue

我假设这更像是一个局部范围问题。只需创建一个新函数,在其中分配clickhandler

private void AssignCallback(PictureBox pb, int index) {
    pb.Click += new System.EventHandler((sender,e)=>this.elevatorDoor_Click(sender,e, index));
}
另一种方法是使用picturebox上的
标记
属性,然后像这样读取回调中标记的值

this.elevatorDoors[i].Tag = i;
this.elevatorDoors[i].Click +=
  new System.EventHandler((sender,e)=>this.elevatorDoor_Click(sender,e, Convert.ToInt32(((Control)i).Tag))-;

如果这不是复制品,请告诉我:它给我10个again@AnastasiosPapanikolaou好的,这应该修复它,定义取当前迭代值的temp,并将其交给EventHandler。
this.elevatorDoors[i].Tag = i;
this.elevatorDoors[i].Click +=
  new System.EventHandler((sender,e)=>this.elevatorDoor_Click(sender,e, Convert.ToInt32(((Control)i).Tag))-;