1

重複の可能性:
C#: ラムダ式で foreach ループの反復子変数を使用する - なぜ失敗するのですか?

カスタム コントロールにいくつかのボタンを追加するメソッドがあります。各ボタンに、そのボタンの詳細を表示するメッセージ ボックスをポップアップ表示するイベント ハンドラーが必要です。

以下のコードを書きましたが、追加したすべてのボタンは、..の最後のボタンに関する詳細を表示List<Pin>pinます。

        public void Populate(List<Pin> pins)
    {
        _pins = pins;

        var count = _pins.Count;
        var location = new Point(5, 5);

        foreach (var pin in _pins)
        {
            var button = new Button();
            button.Text = pin.Name;
            button.Name = "buttonPin_" + pin.Name;
            button.Click += delegate
            {
                MessageBox.Show(pin.Name + Environment.NewLine + pin.Batch);
            };
            button.Size = new Size(30, 30);
            button.Location = location;
            location.X += 30;

            if (location.X > Width) location = new Point(5, location.Y + 35);

            Controls.Add(button);
        }
    }
4

1 に答える 1

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

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

またはラムダとして:

button.Tag = pin;
button.Click += (s, e) =>
{
    var pin = (Pin)s.Tag;
};
于 2012-07-17T14:24:28.793 に答える