gpt4 book ai didi

c# - 带委托(delegate)的事件处理程序

转载 作者:行者123 更新时间:2023-11-30 15:01:51 26 4
gpt4 key购买 nike

我将在 C# 中创建动态按钮,我需要向 Click-Event-Handler (ID) 添加一个参数。

但是,在这个例子中,输出始终是最后一个参数“10”for ALL buttons,而不是“1-2-3-4-5-....”,为什么?

for(int counter = 1; counter < 10; counter++)
{

// Add new button

Button btn = new Button();

btn.Width = 250;
btn.Height = 50;

btn.Click += delegate (object sender1, EventArgs e1)
{ myEventHandler(sender1, e1, counter); };

Test.Controls.Add(btn);

}


public void myEventHandler(object sender, EventArgs e, int i)
{

MessageBox.Show("Test: " + i);

}

感谢您的帮助!

弗洛里安

最佳答案

这是因为计数器变量没有被捕获。这意味着当循环结束时,counter 的值将为 10,因此所有委托(delegate)都将具有该值来修复你可以在循环中使用一个变量,如下所示:

for(int counter = 1; counter < 10; counter++)
{

// Add new button

Button btn = new Button();

btn.Width = 250;
btn.Height = 50;

int num = counter;
btn.Click += delegate (object sender1, EventArgs e1)
{ myEventHandler(sender1, e1, num ); };

Test.Controls.Add(btn);

}


public void myEventHandler(object sender, EventArgs e, int i)
{

MessageBox.Show("Test: " + i);

}

有关更多信息,请参阅有关 stackoverflow 的问题 Captured variable in a loop in C#

关于c# - 带委托(delegate)的事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13525523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com