添加C#按钮阵列单击"运行时"中的代码

KMC*_*KMC 1 c#

要在运行时创建Button及其click事件,我使用:

Button b = new Button();
b.Name = "btn1";
b.Click += btn1_Click;
Run Code Online (Sandbox Code Playgroud)

但是现在我在运行时创建了一系列按钮; 如何设置每个按钮的事件 - 我无法插值,因为它不是一个字符串.

Button[] b = new Button(Count);
for (int i=0; i < Count; i++)
{
  b[i] = new Button();
  b[i].Name = "btn" + i;
  b[i].Click += ??????
}
Run Code Online (Sandbox Code Playgroud)

我该怎么办"?????"

m0s*_*0sa 6

选项1:

您可以传递lambda函数,并根据数组中的按钮索引创建处理程序,如下所示:

for (int i=0; i < Count; i++)
{
   b[i] = new Button();
   b[i].Name = "btn" + i;
   b[i].Click += (sender, args) => 
   {
     // your code
   }
}
Run Code Online (Sandbox Code Playgroud)

选项2:

您可以传递匿名代表:

b[i].Click += delegate (sender, args) {
         // your code
};
Run Code Online (Sandbox Code Playgroud)

选项3:

您可以指定处理函数:

b[i].Click += YourHandlerFunction
// ....

// The handler signature also has to have the correct signature
void YourHandlerFunction(object sender, ButtonEventArgs  args) 
{
    // your code
}
Run Code Online (Sandbox Code Playgroud)