C# 单击动态创建的按钮数组的事件
在我的应用程序中,我动态创建了一组按钮。我正在尝试为这些按钮引发onclick事件,并更改我单击的按钮的文本。我尝试了下面的代码,但它不起作用。我该如何做?有什么建议吗 代码:C# 单击动态创建的按钮数组的事件,c#,asp.net,C#,Asp.net,在我的应用程序中,我动态创建了一组按钮。我正在尝试为这些按钮引发onclick事件,并更改我单击的按钮的文本。我尝试了下面的代码,但它不起作用。我该如何做?有什么建议吗 代码: for (int i = 0; i < 5; i++) { lbl = new Button[5]; lbl[i] = new Button(); lbl[i].Text = "hi"; lbl[i].Width = 30;
for (int i = 0; i < 5; i++)
{
lbl = new Button[5];
lbl[i] = new Button();
lbl[i].Text = "hi";
lbl[i].Width = 30;
lbl[i].Click += new EventHandler(lbl_click);
//lbl[i].CssClass = "label";
div1.Controls.Add(lbl[i]);
}
protected void lbl_click(object sender, EventArgs e)
{
Button[] lbl = sender as button[];
lbl[i].Text = "clicked";
}
您正在事件处理程序中重新创建按钮数组,但此数组未填充以前创建的按钮。它是空的,如果您尝试使用此数组的元素(
null.Text
,它将永远不会工作),它将给您一个null引用异常。而sender对象则表示用户单击的按钮
protected void lbl_click(object sender, EventArgs e)
{
Button lbl = sender as Button;
lbl.Text = "clicked";
}
此外,如果您需要知道单击了哪个特定按钮,那么我建议您在创建时添加一些东西来区分它们:
例如,请使用name属性:
Button[] lbl = new Button[5];
for(int i = 0; i< 5; i++)
{
....
lbl[i].Name = "Button_" + i.ToString();
....
}
按钮[]lbl=新按钮[5];
对于(int i=0;i<5;i++)
{
....
lbl[i].Name=“Button_”+i.ToString();
....
}
请注意,我已将数组声明和初始化移到创建数组的每个元素(实际按钮)的循环之外。您正在事件处理程序中重新创建按钮数组,但此数组未填充以前创建的按钮。它是空的,如果您尝试使用此数组的元素(
null.Text
,它将永远不会工作),它将给您一个null引用异常。而sender对象则表示用户单击的按钮
protected void lbl_click(object sender, EventArgs e)
{
Button lbl = sender as Button;
lbl.Text = "clicked";
}
此外,如果您需要知道单击了哪个特定按钮,那么我建议您在创建时添加一些东西来区分它们:
例如,请使用name属性:
Button[] lbl = new Button[5];
for(int i = 0; i< 5; i++)
{
....
lbl[i].Name = "Button_" + i.ToString();
....
}
按钮[]lbl=新按钮[5];
对于(int i=0;i<5;i++)
{
....
lbl[i].Name=“Button_”+i.ToString();
....
}
请注意,我已将数组声明和初始化移到创建数组中每个元素的循环之外(实际按钮)。这是您的实际代码吗?无论是在
Click
处理程序中还是在第一个代码段中循环的每次迭代中,您都在从头开始重新创建按钮数组。(您的编辑只解决了第一个问题。)您必须在页面生命周期的OnInit事件上定义for循环,并且您的编辑还引入了另一个问题:发件人
是一个按钮,而不是按钮[]
@FrédéricHamidi我尝试了steve的答案它在pageload中有效,但不在方法中。这是您的实际代码吗?无论是在Click
处理程序中还是在第一个代码段中循环的每次迭代中,您都在从头开始重新创建按钮数组。(您的编辑仅修复了第一个问题。)您必须在页面生命周期EAH的OnInit事件上定义for循环,并且您的编辑还引入了另一个问题:发送方
是一个按钮
,而不是按钮[]
@FrédéricHamidi我尝试了steve的答案,它在pageload中有效,但在方法中无效。如果我在pageload中使用它,则其有效。但如果我在方法中使用它,则事件不会触发。请查看右侧的相关
列。关于这个问题有很多问题。我看到了。它告诉我们应该只在页面加载时创建控件。这是真的吗?我们不能在其他任何地方创建它?抱歉,我不能在这方面提供帮助,因为我不是ASP.NET的专家。也许一个关于具体问题的新问题会引起新人们对此的兴趣检查一下,如果我在pageload中使用它,我会问另一个问题。但是如果我在方法中使用它,则事件不会触发。请查看右侧的Related
列。关于这个问题有很多问题。我看到了。它告诉我们应该只在页面加载时创建控件。这是真的吗?我们不能在其他任何地方创建它?抱歉,我不能在这方面提供帮助,因为我不是ASP.NET的专家。也许一个关于具体问题的新问题能引起新人们对这个问题的兴趣。我问了另一个关于这个问题的问题