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

Posted

技术标签:

【中文标题】如何在动态按钮上创建动态按钮单击事件?【英文标题】:How can I create a dynamic button click event on a dynamic button? 【发布时间】:2011-09-05 11:42:02 【问题描述】:

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

如何在 C# ASP.NET 中做到这一点?

【问题讨论】:

【参考方案1】:
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)  

【讨论】:

您必须在 OnInit 方法中创建按钮,否则事件处理程序将不起作用 首先 thnx IN this u write button.Click += (s,e) => your code; ; s = 对象发送者和 e = 事件参数 ri8?但按钮点击事件也不会触发......你能解释一下它是如何工作的...... @amitvyas:这是相同代码的更短但更复杂的版本。而不是显式事件处理程序声明 - 使用 lambda 表达式和匿名方法隐式: this is anon method with 2 arguments declared 这对我也不起作用;事件处理程序从未触发。这可能是因为每次收到请求时都会为按钮创建一个新的事件处理程序。 动态生成的事件必须在!IsPostBack之外的Page_Load/Page_Init事件中注册。【参考方案2】:

对新手来说更容易:

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

【讨论】:

什么是非新手版? @MichaelMello:非新手可能是 lambda 人。 "button.click += (sender, e) => // 在这里做点什么 " :) 我可以传递其他参数吗?即button.Click += new EventHandler(button_Click("Test"));? 没关系,这行得通:button.Click += (se, ev) => button_Click(se, ev, qo);【参考方案3】:

在创建按钮时只需将事件处理程序添加到按钮。

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

void button_Click(object sender, System.EventArgs e)

//your stuff...

【讨论】:

【参考方案4】:

这样做更容易:

Button button = new Button();
button.Click += delegate

   // Your code
;

【讨论】:

【参考方案5】:

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

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


【讨论】:

【参考方案6】:

假设您有 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);
    ...

【讨论】:

以上是关于如何在动态按钮上创建动态按钮单击事件?的主要内容,如果未能解决你的问题,请参考以下文章

按钮单击事件未在用户控件中触发,在另一个用户控件中动态创建

创建基于按钮单击事件动态创建的 Konvajs 形状和连接

如何创建动态的 React Native 组件

用户单击按钮时如何动态创建和删除视图[重复]

动态创建新 Vimeo 播放器列表并添加事件以暂停每个按钮单击的最佳方法是啥?

单击事件不适用于以编程方式/动态创建的选项按钮