我使用以下代码在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);
}
问题在于,单击按钮时获得的值是添加的最后一个按钮。
我该如何解决?
答案 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系列中实现。