foreach循环内的委托方法总是绑定到最后一项

时间:2012-07-17 14:20:58

标签: c# winforms events delegates foreach

  

可能重复:
  C#: using the iterator variable of foreach loop in a lambda expression - why fails?

我有一个方法可以为自定义控件添加一些按钮。我希望每个按钮都有一个事件处理程序,它会弹出一个消息框来显示有关该按钮的详细信息。

我编写了下面的代码,但是我添加的所有按钮都会显示List<Pin>中最后一个按钮的详细信息....如何为每个按钮添加click事件hadnler及其各自{{1}对象?

pin

1 个答案:

答案 0 :(得分:1)

button.Tag = pin;
button.Click += MyHandler;

void MyHandler(object sender, EventArgs e)
{
    var pin = (Pin)sender.Tag;
}

或作为一个lambda:

button.Tag = pin;
button.Click += (s, e) =>
{
    var pin = (Pin)s.Tag;
};