Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在动态按钮上创建动态按钮单击事件?_C#_Asp.net_.net_Button_Event Handling - Fatal编程技术网

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

C# 如何在动态按钮上创建动态按钮单击事件?,c#,asp.net,.net,button,event-handling,C#,Asp.net,.net,Button,Event Handling,我在页面上动态创建一个按钮。现在我想在该按钮上使用按钮单击事件 如何在C#ASP.NET中执行此操作?在创建按钮时,只需将eventhandler添加到按钮中即可 button.Click += new EventHandler(this.button_Click); void button_Click(object sender, System.EventArgs e) { //your stuff... } 对于新手来说,更简单的方法是: Button button = new But

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


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

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

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

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

对于新手来说,更简单的方法是:

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
}

这样做要容易得多:

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

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

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

您可以用一种简单的方式创建按钮,例如:

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

}

什么是非新手版本?@MichaelMello:非新手版本可能是lambda版本。“button.click+=(sender,e)=>{//do somethine here}”:)我可以传递其他参数吗?ie
button.Click+=新建事件处理程序(按钮单击(“测试”)?没关系,这起作用了:
按钮。点击+=(se,ev)=>按钮\u点击(se,ev,qo)您必须在OnInit方法中创建按钮,否则事件处理程序将无法首先在此u写入按钮中工作;s=对象发送方,e=事件参数ri8?但同时也有按钮点击事件不开火。。。你能解释一下它是如何工作的吗?@amitvyas:这是同一代码的较短但更复杂的版本。代替显式事件处理程序声明-隐式使用lambda表达式和匿名方法:
{这是一个声明了2个参数的anon方法}
这对我也不起作用;事件处理程序从未启动。这可能是因为每次收到请求时都会为按钮创建一个新的事件处理程序。动态生成的事件必须在外部的Page_Load/Page_Init event中注册!我回来了。
public void CreateDynamicElements(){

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

}