我正在处理一个项目,我处于管理员需要接受新用户进入系统的情况。我有一个只有管理员可以访问的表单,其中显示了所有等待申请人的列表。我已经了解了如何在运行时创建按钮以及如何为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){
}
这样可行,但正如我所说,只有一个按钮。由于复制方法并将其附加数字一百次,所以相对无痛,我更愿意找到支持更多的方法。
答案 0 :(得分:7)
您可以对所有按钮使用相同的方法! sender
参数将告诉您哪个按钮是源,只需将其转换为按钮即可。您可以在按钮的Tag()属性中存储某种ID,以便知道您正在使用谁(创建它们时,分配它)。
答案 1 :(得分:4)
回答标题问题:您不在循环中创建方法。您偶尔会在循环中创建匿名方法,但请保存以供以后使用:)。
要做你想做的事情:当你生成这些按钮时,它们应该所有指向同一个事件处理程序。您想要运行的逻辑是相同的,但数据是不同的。
如何将数据提供给函数并非易事,一种(hackish)方法是将相关对象(或其索引)存储在按钮的Tag
属性中,然后您可以通过事件处理程序的sender
参数检索。