Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单击动态创建的按钮数组的事件_C#_Asp.net - Fatal编程技术网

C# 单击动态创建的按钮数组的事件

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;

在我的应用程序中,我动态创建了一组按钮。我正在尝试为这些按钮引发onclick事件,并更改我单击的按钮的文本。我尝试了下面的代码,但它不起作用。我该如何做?有什么建议吗

代码

   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的专家。也许一个关于具体问题的新问题能引起新人们对这个问题的兴趣。我问了另一个关于这个问题的问题