在C#EventHandler中发送变量?

log*_*log 0 c#

如何使用新创建的EventHandler发送变量?我的代码是这样的:

for (int i = 0; i < 5; i++)
{   
    Button buttonX = new Button();
    buttonX.Location = new Point(0, 0 + offset);
    buttonX.Size = new Size(310, 48);
    buttonX.Click += new EventHandler(buttonClick);
}

private void buttonClick(object sender, EventArgs e)
{
    MessageBox.Show();
}
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做

buttonX.Click += new EventHandler(buttonClick , i);

private void buttonClick(object sender, EventArgs e, int i)
{
    MessageBox.Show(i.toString());
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*igt 7

关闭是盛大的.你可以使用lambda表示法:

buttonX.Click += (sender, e) => buttonClick(sender, e, i);
Run Code Online (Sandbox Code Playgroud)

或匿名代表符号:

buttonX.Click += delegate (object sender, EventArgs e) { buttonClick(sender, e, i); };
Run Code Online (Sandbox Code Playgroud)

但是,如果捕获循环变量,则会遇到麻烦.

相反,做

for (int i = 0; i < 5; i++)
{   
    Button buttonX = new Button();
    buttonX.Location = new Point(0, 0 + offset);
    buttonX.Size = new Size(310, 48);
    var i_copy = i;
    buttonX.Click += (sender, e) => buttonClick(sender, e, i_copy);
}
Run Code Online (Sandbox Code Playgroud)