动态生成按钮及其单击事件

本文关键字:单击 事件 按钮 动态 | 更新日期: 2023-09-27 18:24:44

我正在执行以下代码来生成带有单击事件的动态按钮。

 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";
}

但是我不能生成动态生成的按钮的点击事件。有人能帮我吗?

动态生成按钮及其单击事件

为了让ASP.NET能够执行您的事件,触发它的控件也应该在回发后存在于您的页面上。你的代码是这样的:

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

到目前为止一切正常,现在出现问题

  • 单击动态添加的按钮
  • 页面再次加载并查找您单击的按钮(这样它就可以找到它的处理程序)
  • 按钮未找到,因为它尚未创建。它是动态创建以进行渲染的,并不是在asp寻找它的阶段回发后创建的

一般规则是,如果您正在动态添加控件,并且希望它们触发事件,则应该在Page_Load中最新添加控件。有关更多详细信息,请阅读ASP.NET页面生命周期概述

我以前提交的是WinForms,我已经删除了它。这是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);
}

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

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

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

您需要在页面加载或页面的page_init事件中添加此代码。那么只有你才能访问它。如何动态添加控件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);
       }
}