我正在执行以下代码,以便通过点击事件生成动态按钮。
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事件。 任何人都可以帮助我吗?
答案 0 :(得分:2)
为了使ASP.NET能够执行您的事件,在回发后,您的页面上也应该存在触发它的控件。你的代码发生了什么,如下所示:
直到现在一切都好,现在出现问题
一般规则是,如果您要动态添加控件并希望它们触发事件,则应在Page_Load中执行最新操作。 有关详细信息,请阅读ASP.NET Page Life Cycle Overview
答案 1 :(得分:1)
我之前的提交是关于我删除的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);
}
答案 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);
}
}