C# 以编程方式创建按钮时不会激发事件
我正在使用事件处理程序动态创建一个按钮。但事件并未发生。请帮我做这个。我的部分代码在这里C# 以编程方式创建按钮时不会激发事件,c#,asp.net,c#-4.0,C#,Asp.net,C# 4.0,我正在使用事件处理程序动态创建一个按钮。但事件并未发生。请帮我做这个。我的部分代码在这里 Button btn = new Button(); btn.ID = "btn" + i; btn.Text = "Add New"; Panel1.Controls.Add(btn); btn.Click += new EventHandler(this.GreetingBtn_Click); Panel1.Controls.Add(new LiteralControl("<br /&
Button btn = new Button();
btn.ID = "btn" + i;
btn.Text = "Add New";
Panel1.Controls.Add(btn);
btn.Click += new EventHandler(this.GreetingBtn_Click);
Panel1.Controls.Add(new LiteralControl("<br /><br />"));
void GreetingBtn_Click(Object sender, EventArgs e)
{
create();
}
按钮btn=新按钮();
btn.ID=“btn”+i;
btn.Text=“添加新”;
面板1.控件。添加(btn);
btn.Click+=新建事件处理程序(此.GreetingBtn\u单击);
Panel1.Controls.Add(新的LiteralControl(“
”);
无效问候点击(对象发送者,事件参数e)
{
创建();
}
我想在单击按钮时访问create()函数。在不太了解代码的情况下,我猜您不是在ASP.NET的相应阶段创建控件 您需要的是PreInit,如下所述: 在开始阶段完成后和初始化阶段开始前引发。 将此事件用于以下操作: 创建或重新创建动态控件
Move
btn.Click+=neweventhandler(this.GreetingBtn\u Click)代码>上排一级,即添加到父级之前,并尝试路由事件
Button btn = new Button();
btn.ID = "btn" + i;
btn.Text = "Add New";
btn.Click += new RoutedEventHandler(this.GreetingBtn_Click);
Panel1.Controls.Add(btn);
Panel1.Controls.Add(new LiteralControl("<br /><br />"));
void GreetingBtn_Click(Object sender, RoutedEventArgs e)
{
create();
}
按钮btn=新按钮();
btn.ID=“btn”+i;
btn.Text=“添加新”;
btn.Click+=新建路由EventHandler(此.GreetingBtn\u单击);
面板1.控件。添加(btn);
Panel1.Controls.Add(新的LiteralControl(“
”);
无效问候点击(对象发送者,路由目标)
{
创建();
}
如果要在页面加载时添加此动态按钮,请确保其处于
if (!IsPostBack)
{
//add button here
}
始终将创建一次性控件的代码放在侧面!iPostBack
,因为它们不需要一次又一次地创建
if (!IsPostBack)
{
//Your code should be their enter code here
}
List myControls=new List();
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!IsPostBack)
{
myControls=新列表();
ViewState[“myControls”]=myControls;
}
}
受保护的void覆盖void LoadViewState(对象savedState)
{
base.LoadViewState(savedState);
myControls=(列表)ViewState[“myControls”];
foreach(myControls中的字符串controlID){
//创建按钮的方法位于此处。
创建按钮(controlID);
}
}
公共无效创建按钮(字符串btnID){
按钮btn=新按钮();
btn.ID=btnID;
btn.Text=“添加新”;
btn.Click+=新建路由EventHandler(此.GreetingBtn\u单击);
面板1.控件。添加(btn);
Panel1.Controls.Add(新的LiteralControl(“
”);
}
无效问候点击(对象发送者,路由目标){
创建();
}
试试这段代码。在asp.net中动态添加控件时,必须在回发中重新创建控件。最简单的方法是使用viewstate,如上所示
不正确执行此操作的常见迹象是:单击控件时,控件消失,或者事件根本不触发。希望这对别人有帮助 在哪个页面事件中创建按钮?我已修改了答案:尝试路由事件而不是经典事件。
List<string> myControls = new List<string>();
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
myControls = new List<string>();
ViewState["myControls"] = myControls;
}
}
protected void override void LoadViewState(object savedState)
{
base.LoadViewState(savedState);
myControls = (List<string>)ViewState["myControls"];
foreach(string controlID in myControls){
//method to create your buttons goes here.
createButtons(controlID);
}
}
public void createButtons(string btnID){
Button btn = new Button();
btn.ID = btnID;
btn.Text = "Add New";
btn.Click += new RoutedEventHandler(this.GreetingBtn_Click);
Panel1.Controls.Add(btn);
Panel1.Controls.Add(new LiteralControl("<br /><br />"));
}
void GreetingBtn_Click(Object sender, RoutedEventArgs e){
create();
}