【问题标题】:add new event to button向按钮添加新事件
【发布时间】:2011-07-19 17:17:50
【问题描述】:
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页面刷新时。

我想先点击“一”,然后点击“二” 仅在单击按钮 a 后才显示该按钮

【问题讨论】:

    标签: c# asp.net event-handling


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 这是对的,但这里是屋顶
    【解决方案2】:

    您必须重新创建动态控件(例如您的新按钮b)并在每次回发时再次关联它们的事件处理程序。因此,您需要将代码从test 移动到Page_Load。如果您只想在单击按钮 a 后才显示该按钮,请使按钮 b 不可见(简单解决方案)或在触发创建 b 的视图状态中存储一些布尔值(更复杂的解决方案)。

    【讨论】:

      【解决方案3】:

      每次访问(或刷新)ASP 页面时,都会重新创建对象并运行 Page_Load 事件。这意味着当您点击第一个按钮时,会创建第二个按钮,并且该事件被订阅到 在该页面对象的实例中

      当您下次点击该按钮时,会创建一个新的页面对象,并且在该页面对象中该事件从未被订阅过。

      动态创建控件通常不是一个好主意,而是创建所有控件并隐藏那些您不想立即显示的控件。此外,您应该在页面加载中添加对 IsPostBack 的检查,以便您可以区分首次初始化和回发时重新创建对象的时间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多