【发布时间】:2011-09-05 11:42:02
【问题描述】:
我正在动态地在页面上创建一个按钮。现在我想在那个按钮上使用按钮点击事件。
如何在 C# ASP.NET 中做到这一点?
【问题讨论】:
标签: c# asp.net .net button event-handling
我正在动态地在页面上创建一个按钮。现在我想在那个按钮上使用按钮点击事件。
如何在 C# ASP.NET 中做到这一点?
【问题讨论】:
标签: c# asp.net .net button event-handling
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) { }
【讨论】:
{ this is anon method with 2 arguments declared }
对新手来说更容易:
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.Click += new EventHandler(button_Click("Test"));?
button.Click += (se, ev) => button_Click(se, ev, qo);
在创建按钮时只需将事件处理程序添加到按钮。
button.Click += new EventHandler(this.button_Click);
void button_Click(object sender, System.EventArgs e)
{
//your stuff...
}
【讨论】:
这样做更容易:
Button button = new Button();
button.Click += delegate
{
// Your code
};
【讨论】:
您可以通过简单的方式创建按钮,例如:
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);
}
【讨论】:
假设您有 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);
...
}
【讨论】: