0

このコードを使用して、forループにUIButtonを追加しています。

for (int i=0; i <12; i++) {
    button = new UIButton(new RectangleF(xBase + i * 25,100 + i,25,25));
    button.SetBackgroundImage(UIImage.FromBundle ("Images/b.png"),UIControlState.Normal);
    button.TouchUpInside += (s, e) => { 
        UIAlertView alert = new UIAlertView("",i.ToString(),null,"",null);
        alert.Show();
    };
    this.Add (button);
}

問題は、ボタンをクリックしたときに取得する値が、最後に追加されたボタンの値であるということです。

どうすればそれを解決できますか?

4

2 に答える 2

2

これはおそらく、C#のクロージャの変数の性質によるものです。ループ変数をループ内のローカル変数にバインドしてみてください。ここにいくつかの関連情報があります

于 2013-03-25T21:54:59.043 に答える
1

ループ変数を閉じています。また、C#のループ変数はループの外側で定義されています。

このようにコードを修正できます

for (int i=0; i <12; i++) {
    button = new UIButton(new RectangleF(xBase + i * 25,100 + i,25,25));
    button.SetBackgroundImage(UIImage.FromBundle ("Images/b.png"),UIControlState.Normal);
    button.TouchUpInside += (s, e) => { 
        var j = i;
        UIAlertView alert = new UIAlertView("",j.ToString(),null,"",null);
        alert.Show();
    };
this.Add (button);

}

うまくいけば、動作がで変更されたので、ではなくループでこれを行っていますが、その変更forがモノラル3.0.Xシリーズでまだ実装されているかどうかはわかりません。foreachC# 5

于 2013-03-26T08:44:02.873 に答える