用于创建方法的 for 循环或某种等效项

本文关键字:循环 创建 方法 for 用于 | 更新日期: 2023-09-27 18:33:30

我正在处理一个项目,我处于管理员需要接受新用户进入系统的情况。我有一个只有管理员才能访问的表格,其中显示了所有等待申请人的列表。我已经了解如何在运行时创建按钮以及如何为 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){
}

这有效,但正如我所说,仅适用于一个按钮。尽管复制该方法并将其名称附加一百次数字相对轻松,但我更愿意找到一种支持更多方法的方法。

用于创建方法的 for 循环或某种等效项

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

private void newButtonClick (Object sender, System.EventArgs e){
    Button btn = (Button)sender;
    // ... do something with "btn" in here ...
}

回答名义上的问题:你不会在循环中创建方法。您偶尔会在循环中创建匿名方法,但将其保存以供以后:)使用。

但是,要执行所需的操作:生成这些按钮时,它们应都指向相同的事件处理程序。要运行的逻辑相同,但数据不同。

如何将数据获取到函数并非易事,一种方法(hackish)是将相关对象(或其索引)存储在按钮的 Tag 属性中,然后您可以通过事件处理程序的 sender 参数检索该对象。