如何将函数绑定到C#中控件数组中每个控件的Click事件

Hos*_*ein 1 c# control-array bind event-handling winforms

在C#中创建控件数组时,如何将接收单击按钮索引的函数绑定到其click事件?

以下是一些仅用于更好理解的代码.在代码之上的某处,您可以定义按钮:

Button [] buttons = new Button[100];
Run Code Online (Sandbox Code Playgroud)

它们的标准Click事件如下所示:

private void myClick(object sender, EventArgs e)
{

}
Run Code Online (Sandbox Code Playgroud)

通常你这样绑定它:

for (int i = 0; i < 100; i++)
    buttons[i].Click += myClick;
Run Code Online (Sandbox Code Playgroud)

但我希望事件处理程序采用以下形式:

private void myClick(int Index)
{

}
Run Code Online (Sandbox Code Playgroud)

如何使用/不使用临时功能将点击事件绑定到上述功能?

我想过使用委托,Func<T, TResult>表示法,或以某种方式传递自定义EventArgs,其中包含单击按钮的索引; 但由于缺乏足够的C#知识,我没有成功.

如果你们中的任何人建议在其标签中保存每个控件的索引:是的,这是可能的,但我不想出于某种原因使用它,因为如果你有一个类抛出一些事件但是没有标签属性或东西,这种方式是没用的.

Bas*_*Bas 6

int index = i;    
buttons[index].Click += (sender, e) => myClick(index);
Run Code Online (Sandbox Code Playgroud)

如下面的评论中所述,使用'i'将对所有控件使用相同的变量,因为它的范围.因此,有必要在与lambda表达式相同的范围内创建一个新变量.