Monotouch在for循环中添加按钮

时间:2013-03-25 21:43:12

标签: c# xamarin.ios xamarin

我使用以下代码在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);
}

问题在于,单击按钮时获得的值是添加的最后一个按钮。

我该如何解决?

2 个答案:

答案 0 :(得分:2)

这可能是因为C#中闭包中变量的性质。尝试将循环变量绑定到循环内的局部变量。您可能会找到一些相关信息here

答案 1 :(得分: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中的behaviour changed相同,但我不知道该更改是否为{{1}}是否已在单声道3.0.X系列中实现。