C# 用于循环的单触式添加按钮
我使用以下代码在for循环中添加UIButtons:C# 用于循环的单触式添加按钮,c#,xamarin.ios,xamarin,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 += (
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);
}
for(inti=0;i{
UIAlertView alert=new UIAlertView(“,i.ToString(),null,”,null);
alert.Show();
};
这个。添加(按钮);
}
问题是,我在单击按钮时得到的值是最后添加的按钮的值
如何解决这个问题?这可能是因为C#中闭包中变量的性质。尝试将循环变量绑定到循环中的局部变量。您可能会找到一些相关信息这可能是因为C#中闭包中变量的性质。尝试将循环变量绑定到loo中的局部变量p、 您可能会发现一些相关信息您正在关闭循环变量。而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(inti=0;i{
var j=i;
UIAlertView alert=new UIAlertView(“,j.ToString(),null,”,null);
alert.Show();
};
这个。添加(按钮);
}
希望您是在
for
循环中完成这项工作的,而不是在foreach
,因为inC#5
,但我不知道这项更改是否已经在mono 3.0.X系列中实现。您正在关闭循环变量。而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(inti=0;i{
var j=i;
UIAlertView alert=new UIAlertView(“,j.ToString(),null,”,null);
alert.Show();
};
这个。添加(按钮);
}
希望您是在for
循环中完成这项工作的,而不是像在C#5
中那样在foreach
循环中完成的,但是我不知道mono 3.0.X系列中是否实现了这项更改