如何在动态按钮上创建动态按钮单击事件?

时间:2011-05-31 13:00:26

标签: c# asp.net .net button event-handling

我正在动态地在页面上创建一个按钮。现在我想使用该按钮上的按钮点击事件。

如何在C#ASP.NET中执行此操作?

6 个答案:

答案 0 :(得分:52)

Button button = new Button();
button.Click += (s,e) => { your code; };
//button.Click += new EventHandler(button_Click);
container.Controls.Add(button);

//protected void button_Click (object sender, EventArgs e) { }

答案 1 :(得分:34)

新手更容易:

Button button = new Button();
button.Click += new EventHandler(button_Click);

protected void button_Click (object sender, EventArgs e)
{
    Button button = sender as Button;
    // identify which button was clicked and perform necessary actions
}

答案 2 :(得分:10)

创建时,只需将eventhandler添加到按钮即可。

 button.Click += new EventHandler(this.button_Click);

void button_Click(object sender, System.EventArgs e)
{
//your stuff...
}

答案 3 :(得分:7)

这样做容易得多:

Button button = new Button();
button.Click += delegate
{
   // Your code
};

答案 4 :(得分:0)

您可以通过简单的方式创建按钮,例如:

Button button = new Button();
button.Click += new EventHandler(button_Click);

protected void button_Click (object sender, EventArgs e)
{
    Button button = sender as Button;
    // identify which button was clicked and perform necessary actions
}

但事件可能不会触发,因为必须在每次回发时重新创建一个或多个元素,否则您将丢失事件处理程序。

我尝试了这个解决方案来验证 ViewState 已经生成并在每次回发时重新创建元素,

例如,假设您在点击事件时创建按钮:

    protected void Button_Click(object sender, EventArgs e)
    {
       if (Convert.ToString(ViewState["Generated"]) != "true")
        {
            CreateDynamicElements();
        }
    
    }

在回发时,例如在页面加载时,您应该这样做:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Convert.ToString(ViewState["Generated"]) == "true") {
            CreateDynamicElements();
        }
    }

在 CreateDynamicElements() 中,您可以放置​​所需的所有元素,例如按钮。

这对我来说效果很好。

public void CreateDynamicElements(){

    Button button = new Button();
    button.Click += new EventHandler(button_Click);

}

答案 5 :(得分:-1)

假设您有25个对象,并希望一个进程处理任何一个对象点击事件。您可以编写25个代理或使用循环来处理click事件。

public form1()
{
    foreach (Panel pl  in Container.Components)
    {
        pl.Click += Panel_Click;
    }
}

private void Panel_Click(object sender, EventArgs e)
{
    // Process the panel clicks here
    int index = Panels.FindIndex(a => a == sender);
    ...
}