C# 用于创建方法的for循环,还是其他等效方法?

C# 用于创建方法的for循环,还是其他等效方法?,c#,for-loop,methods,runtime,C#,For Loop,Methods,Runtime,我正在做一个项目,我的情况是管理员需要接受系统中的新用户。我有一个只有管理员才能访问的表单,它显示了所有等待申请者的列表。我已经了解了如何在运行时创建按钮,以及如何为click事件添加事件处理程序,但是该处理程序需要一个同名的方法才能运行 显然,我不能把方法的代码放在for循环中,除非我弄错了。我将如何让该计划能够支持可能无限多的申请人 void AcceptUsersAdminLoad(object sender, EventArgs e) { //FOR LOOP -

我正在做一个项目,我的情况是管理员需要接受系统中的新用户。我有一个只有管理员才能访问的表单,它显示了所有等待申请者的列表。我已经了解了如何在运行时创建按钮,以及如何为click事件添加事件处理程序,但是该处理程序需要一个同名的方法才能运行

显然,我不能把方法的代码放在for循环中,除非我弄错了。我将如何让该计划能够支持可能无限多的申请人

void AcceptUsersAdminLoad(object sender, EventArgs e)
{       
    //FOR LOOP - To be finished. Will read an xml file to find out # to loop.
    Button newButton = new Button();
    newButton.Click += new System.EventHandler(newButtonClick);
    newButton.Text = "Accept";
    Panel1.Controls.Add(newButton);

}

private void newButtonClick (Object sender, System.EventArgs e){

}

这是可行的,但正如我所说,只有一个按钮。复制该方法并在其名称后面加上一百次数字是相对轻松的,但我更愿意找到一种支持更多方法的方法。

回答名义上的问题:您不会在循环中创建方法。您偶尔会在循环中创建匿名方法,但请稍后保存:)

但要想做您想做的事情:当您生成这些按钮时,它们都应该指向同一个事件处理程序。您想要运行的逻辑是相同的,但数据是不同的


获取函数数据的方法并不简单,一种(黑客)方法是将相关对象(或其索引)存储在按钮的
标记
属性中,然后可以通过事件处理程序的
sender
参数来检索。

回答名义上的问题:您不在循环中创建方法。您偶尔会在循环中创建匿名方法,但请稍后保存:)

但要想做您想做的事情:当您生成这些按钮时,它们都应该指向同一个事件处理程序。您想要运行的逻辑是相同的,但数据是不同的


获取函数数据的方法并不简单,一种(黑客)方法是将相关对象(或其索引)存储在按钮的
标记
属性中,然后可以通过事件处理程序的
sender
参数进行检索。

您可以对所有按钮使用相同的方法!
sender
参数将告诉您哪个按钮是源按钮,只需将其转换为按钮即可。您可以在按钮的
.Tag()
属性中存储某种类型的ID,以便知道您正在与谁一起工作(创建它们时,将其分配)


您可以对所有按钮使用相同的方法!
sender
参数将告诉您哪个按钮是源按钮,只需将其转换为按钮即可。您可以在按钮的
.Tag()
属性中存储某种类型的ID,以便知道您正在与谁一起工作(创建它们时,将其分配)


对落选的选民来说,这个答案有什么不对?这实际上和后面的答案是一样的。我敢肯定大多数人在第一行之后就停止了阅读。。。在他的案例中,这确实是一种误导,“你不知道,但这里是如何改变的”…@chancea我可以改变它,但这确实是答案。您不会动态创建方法(大多数情况下)。显然,OP部分对方法应该如何工作存在混淆。然后更好地解释你“不做”的地方,因为在我阅读整个答案之前,我不确定你“不做”的地方。我知道你指的是OP的标题,但如果你只是全面阅读OP的问题,从标题上看是非常误导的。这个解决方案是你“可以做的”@BradleyDotNET我现在可以投票了:)但是我不是投否决票的人,所以我不能帮你投否决票,这个答案怎么了?这实际上和后面的答案是一样的。我敢肯定大多数人在第一行之后就停止了阅读。。。在他的案例中,这确实是一种误导,“你不知道,但这里是如何改变的”…@chancea我可以改变它,但这确实是答案。您不会动态创建方法(大多数情况下)。显然,OP部分对方法应该如何工作存在混淆。然后更好地解释你“不做”的地方,因为在我阅读整个答案之前,我不确定你“不做”的地方。我知道你指的是OP的标题,但如果你只是全面阅读OP的问题,从标题上看是非常误导的。这个解决方案是你“可以做的”@BradleyDotNET我现在可以投票了:)但我不是那个投了反对票的人,所以我不能帮你。我本来打算这么做的,但我能找到的唯一自动网格格式是数据网格,我决定用更多的手动网格来显示它们。我本来打算这么做的,但是我能找到的唯一的自动网格格式是数据网格,我决定用更多的手动网格来显示它们。我需要它做什么就好了。
private void newButtonClick (Object sender, System.EventArgs e){
    Button btn = (Button)sender;
    // ... do something with "btn" in here ...
}