动态生成按钮及其单击事件
本文关键字:单击 事件 按钮 动态 | 更新日期: 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);
}
}