我在Android Xamarin(C#)中以编程方式创建按钮,如下所示:
for(int i = 0; i < 3; i++) {
...
Button b = new Button(this);
b.Click += delegate {
processClick(i);
};
...
}
processClick方法如下所示:
public void processClick(int i) {
... Log("i: " + i);
}
它成功创建了3个按钮,但是如果我按下其中任何一个按钮,控制台记录的编号为3.问题是,如何处理按编程创建按钮的点击事件?
答案 0 :(得分:3)
这称为closure。重写你的for循环如下:
for(int i = 0; i < 3; i++) {
...
Button b = new Button(this);
var j= i;
b.Click += delegate {
processClick(j);
};
...
}
与此主题相关的SO上也有一个很好的discussion。