How can I create a dynamic button click event on a dynamic button?
我正在页面上动态创建一个按钮。 现在,我想在该按钮上使用按钮单击事件。
如何在C#ASP.NET中做到这一点?
1 2 3 4 5 6
| 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方法中创建按钮,否则事件处理程序将无法工作
-
首先,单击此写按钮。单击+ =(s,e)=> {您的代码; }; s =对象发送者,e =事件参数ri8?但是按钮单击事件也不会触发...您能向我解释一下它如何工作..
-
@amitvyas:这是同一代码的较短但较复杂的版本。代替显式的事件处理程序声明-使用lambda表达式和匿名方法隐式:{ this is anon method with 2 arguments declared }
-
这对我也没有用;事件处理程序从未触发过。这可能是因为每次接收到请求时都会为按钮创建一个新的事件处理程序。
-
@Sam:我认为这是由于另一个原因。由于页面生命周期甚至在每个请求上都已创建,因此应该触发处理程序。如果创建也发生在回发上,则可能是一个问题。
-
@abatishchev,在我的情况下,是在DataList的ItemDataBound事件期间将事件处理程序分配给DataListItem中的控件。我不太确定是什么原因引起的。
-
动态生成的事件必须在!IsPostBack之外的Page_Load / Page_Init事件中注册。
对于新手来说更简单的一种:
1 2 3 4 5 6 7 8
| 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 + =(发送者,e)=> {//在这里做某事}" :)
-
我可以与此同时传递其他论点吗?即button.Click += new EventHandler(button_Click("Test"));?
-
没关系,这可行:button.Click += (se, ev) => button_Click(se, ev, qo);
只需在创建事件处理程序时将其添加到按钮即可。
1 2 3 4 5 6
| button .Click += new EventHandler (this.button_Click);
void button_Click (object sender, System.EventArgs e )
{
//your stuff...
} |
这很容易做到:
1 2 3 4 5
| Button button = new Button ();
button .Click += delegate
{
// Your code
}; |
假设您有25个对象,并且希望一个进程处理任何一个对象的click事件。 您可以编写25个委托或使用循环来处理click事件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 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);
...
} |