0

我正在使用以下代码在 for 循环中添加 UIButtons:

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循环中执行此操作,而不是在中foreach更改行为C# 5,但我不知道该更改是否已在单声道 3.0.X 系列中实现。

于 2013-03-26T08:44:02.873 回答