2016-12-04 7 views
4

私はピクチャボックスの配列を持っています。オブジェクトの配列番号をイベントハンドラに渡します。

特定のオブジェクトのクリックイベントであるオブジェクトのクリックイベントに渡したいと思います。

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

しかし、イベントがアップ発射したときに私が得るすべては私が第四のPictureBoxをクリックすると、たとえば数4を取得したいと思い番号10です。

+0

のようなあなたのコールバックでのタグの値を読み取ることであろうあなたははclickHandlerを割り当てる新しい機能

private void AssignCallback(PictureBox pb, int index) { pb.Click += new System.EventHandler((sender,e)=>this.elevatorDoor_Click(sender,e, index)); } 

を作成これが重複していないかどうかを知る:http://stackoverflow.com/questions/38710655/multiple-control-click-events-handled-by-one-event –

答えて

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

これで解決します。したがって、イベントを呼び出すときには、ループ反復の現在の値を取っていることをかなり確実に確認する必要があります。ループを離れると、値は常に最後の値に等しくなります。そこで、現在の反復を格納するtempValueを導入します。

+0

それは私に再び10を与える –

+0

@AnastasiosPapanikolaou大丈夫これはそれを修正する必要があります、現在の反復値をとり、それをEventHandlerに渡すtempを定義します。 – mybirthname

0

これはローカルスコープの問題のように思えます。ただ、別の方法が私にしてみましょうのPictureBox上Tagプロパティを使用し、そう

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