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))-;