向按钮添加新事件

本文关键字:事件 新事件 按钮 添加 | 更新日期: 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检查,以便区分首次初始化和在回发时重新创建对象。