使用click事件动态生成按钮

时间:2012-02-15 09:18:04

标签: c# asp.net

我正在执行以下代码,以便通过点击事件生成动态按钮。

 protected void Button1_Click(object sender, EventArgs e)
{
    for (int i = 0; i < int.Parse(TextBox1.Text); i++)
    {
        Button bt = new Button();
        bt.Text = "ok";
        bt.Click += new EventHandler(bt_click);
        this.form1.Controls.Add(bt);

    }
}
protected void bt_click(object sender, EventArgs e)
{
    Label1.Text = "Clicked";
}

但我无法生成该动态生成按钮的click事件。 任何人都可以帮助我吗?

5 个答案:

答案 0 :(得分:2)

为了使ASP.NET能够执行您的事件,在回发后,您的页面上也应该存在触发它的控件。你的代码发生了什么,如下所示:

  • 页面有几个按设计模式放置的按钮
  • 点击生成新按钮的按钮
  • 页面再次加载并在页面中查找您单击的按钮
  • 找到
  • 按钮,asp查找事件处理程序并执行它
  • 添加新动态按钮并附加事件,再次呈现页面

直到现在一切都好,现在出现问题

  • 点击动态添加的按钮
  • 页面再次加载并查找您单击的按钮(因此它可以找到它的处理程序)
  • 找不到
  • 按钮,因为它尚未创建。它是动态创建的,用于渲染,并且在asp正在寻找它的阶段回发后没有创建

一般规则是,如果您要动态添加控件并希望它们触发事件,则应在Page_Load中执行最新操作。 有关详细信息,请阅读ASP.NET Page Life Cycle Overview

答案 1 :(得分:1)

我之前的提交是关于我删除的Win​​Forms。这是asp.net上的那个

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        for (int i = 0; i < int.Parse(TextBox1.Text); i++)
        {
            CreateButton(i);
        }
    }
}
protected void Button1_Click(object sender, EventArgs e)
{
}

protected void bt_click(object sender, EventArgs e)
{
    Button btn = sender as Button;
    Label1.Text = btn.Text + " Clicked";
}

private void CreateButton(int id)
{
    Button bt = new Button();
    bt.Text = "ok" + id.ToString();
    bt.Click += new EventHandler(bt_click);
    bt.ID = "btn" + id.ToString();
    this.Form.Controls.Add(bt);
}

答案 2 :(得分:0)

您需要设置这些新按钮的位置,否则它们将相互覆盖。

答案 3 :(得分:0)

我不确定它是否是你的问题,但你可能想要设置你添加的每个按钮的位置属性:

bt.Location = new Point(25,i+55);

答案 4 :(得分:0)

您需要在页面加载或页面的page_init事件中添加此代码。那么只有你可以访问它。 How to add controls dynamically asp.net

protected void Page_Load()
{
    for (int i = 0; i < int.Parse(textBox1.Text); i++)
       {
          Button bt = new Button();
          bt.Text = "ok";
          bt.Click += new EventHandler(bt_click);
          this.Controls.Add(bt);
       }
}