向按钮添加新事件
本文关键字:事件 新事件 按钮 添加 | 更新日期: 2023-09-27 18:02:25
protected void Page_Load(object sender, EventArgs e)
{
Button a = new Button();
a.Width = 100;
a.Height = 100;
a.Text = "one";
a.Click += new EventHandler(test);
form1.Controls.Add(a);
}
protected void test(object sender, EventArgs e)
{
Button b = new Button();
b.Width = 100;
b.Height = 100;
b.Text = "two";
b.Click += new EventHandler(test2);
form1.Controls.Add(b );
Response.Write("aaaaaaaaaaaaaaaaaa");
}
protected void test2(object sender, EventArgs e)
{
Response.Write("bbbbbbbbbbbbbbb");
}
点击one
显示two
按钮,点击two
按钮不运行test2
????当点击two
页面刷新。
我想先点击' 1 ',然后点击' 2 '仅在按钮a被点击后显示按钮
试试这个:
protected void Page_Init(object sender, EventArgs e)
{
Button a = new Button();
a.Width = 100;
a.Height = 100;
a.Text = "one";
a.Click += new EventHandler(test);
form1.Controls.Add(a);
Button b = new Button();
b.Visible = false;
b.Width = 100;
b.Height = 100;
b.Text = "two";
b.Click += new EventHandler(test2);
form1.Controls.Add(b);
}
protected void test(object sender, EventArgs e)
{
b.Visible = true;
Response.Write("aaaaaaaaaaaaaaaaaa");
}
protected void test2(object sender, EventArgs e)
{
Response.Write("bbbbbbbbbbbbbbb");
}
您必须重新创建动态控件(例如您的新按钮b
),并在每次回发时再次关联它们的事件处理程序。因此,您需要将代码从test
移动到Page_Load
。如果你想在按钮a
被点击之后才显示按钮,要么让按钮b
不可见(简单的解决方案),要么在视图状态中存储一些布尔值,触发b
的创建(更复杂的解决方案)。
每次访问(或刷新)ASP页面时,都会重新创建该对象并运行Page_Load事件。这意味着当您点击第一个按钮时,将创建第二个按钮,并将事件订阅到页面对象实例中的。
下次点击按钮时,将创建一个新的page对象,并且在该page对象中该事件从未被订阅过。
动态创建控件通常不是一个好主意,而是创建所有控件并隐藏那些您不想立即显示的控件。此外,您应该在页面加载中添加IsPostBack
检查,以便区分首次初始化和在回发时重新创建对象。