Monotouch添加按钮在for循环
本文关键字:for 循环 按钮 添加 Monotouch | 更新日期: 2023-09-27 18:06:02
我正在使用以下代码在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);
}
问题是,当我点击按钮时得到的值,是最后添加的按钮。
我如何解决这个问题?
这可能是因为c#闭包中变量的性质。尝试将循环变量绑定到循环中的局部变量。你可以在这里找到一些相关信息
您正在结束循环变量。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
中行为发生了变化,但我不知道这种变化是否在mono 3.0中实现。