在“非aspx.cs”页面动态创建的按钮,如何创建这个按钮的事件?

woodyy 2009-04-22 11:23:50
我在web项目之外的,另外一个类库项目里某个类里,动态创建了一个按钮。

如何创建这个按钮的事件呢?做了几次都不成功。


//这个事件是由UI层页面一个按钮单击触发的,这个无关紧要吧。
void CreateButton()
{
System.Web.UI.Page currentPage = HttpContext.Current.Handler as Page;
Button b = new Button();
b.Click += new EventHandler(b_Click);//与下句的顺序调换,仍旧不行。
currentPage.FindControl("form1").Controls.Add(ButtonExcStep2);
}



void ButtonExcStep2_Click(object sender, EventArgs e)
{
//该按钮的一些事件,跟踪了,根本就不执行。
}


查过资料说如果在aspx.cs页面这么写,必须放在page_load里!ispostback外,这样的位置。
可问题是我动态创建的不在aspx.cs页面,那怎么做呢?

请注意,在"非aspx.cs"动态创建按钮,创建它的事件。谢谢
...全文
216 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
我姓区不姓区 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 woodyy 的回复:]
引用 21 楼 ojlovecd 的回复:
引用 19 楼 woodyy 的回复:
我想保持aspx.cs页面里protected void Page_Load(object sender, EventArgs e)

这个函数里,一行代码都没有,因为有其他的作用。

汗,那你总得调用类库吧,一行代码都没有的话你怎么调用?


我在一楼的帖子里已经说了,用UI层的aspx.cs里的某个按钮事件来触发“void CreateButton()”函数。

调用类库,用aspx上的某个按钮的后台事件(aspx.cs里的单击事件…
[/Quote]
呵呵,那是我没看仔细,原来是想在页面的某个按钮的单击事件里创建,那这个就要涉及到asp.net的页面生命周期了,你稍等,我再给你写一个demo
woodyy 2009-04-22
  • 打赏
  • 举报
回复
小白,你刚才的代码我测试了。跟踪CreateChildControls() 里的代码,不执行。

我public class Class1: System.Web.UI.Page

这么写的。重写了CreateChildControls(),但是调试时不执行。不知道啥原因。
woodyy 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 ojlovecd 的回复:]
引用 19 楼 woodyy 的回复:
我想保持aspx.cs页面里protected void Page_Load(object sender, EventArgs e)

这个函数里,一行代码都没有,因为有其他的作用。

汗,那你总得调用类库吧,一行代码都没有的话你怎么调用?
[/Quote]

我在一楼的帖子里已经说了,用UI层的aspx.cs里的某个按钮事件来触发“void CreateButton()”函数。

调用类库,用aspx上的某个按钮的后台事件(aspx.cs里的单击事件)来触发void CreateButton()嘛~

ak8800 2009-04-22
  • 打赏
  • 举报
回复
这个类上面有个抽象类,是重写的!
woodyy 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 woodyy 的回复:]
C# code
//刚才代码贴错了,抱歉。
void CreateButton()
{
System.Web.UI.Page currentPage = HttpContext.Current.Handler as Page;
Button b = new Button();
b.Click += new EventHandler(b_Click);//与下句的顺序调换,仍旧不行。
currentPage.FindControl("form1").Controls.Add(b);
}
void b_Click(object sender, EventArgs e)
{
//该按钮的一些事件,跟踪了,根本就不执行。
}
[/Quote]

天行健,这个是我三楼的帖子,你看下,咱俩的代码一样,我都测试过n次了,确实无法执行事件。
我姓区不姓区 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 woodyy 的回复:]
天行健,谢谢你呀,可是那样不行呀,我当初就是这么写的,你看看我第一个帖子。

这样写不行,我测试过了,根本不触发b_Click事件的,你试下就知道了。我原来也是觉得就该这么做了,可是不行。
C# code//这个类是在WEB项目之外的另外一个类库里。publicclassClass1
{publicvoidCreateButton()
{
Page currentPage=HttpContext.Current.HandlerasPage;
Button b=newButton();

[/Quote]
我试过了,不过我可没有本事在.aspx.cs里一句代码都不写,不写的话怎么调用:

protected void Page_Load(object sender, EventArgs e)
{
Class1 cl = new Class1();
cl.CreateButton();
}

我姓区不姓区 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 woodyy 的回复:]
我想保持aspx.cs页面里protected void Page_Load(object sender, EventArgs e)

这个函数里,一行代码都没有,因为有其他的作用。
[/Quote]
汗,那你总得调用类库吧,一行代码都没有的话你怎么调用?
woodyy 2009-04-22
  • 打赏
  • 举报
回复
天行健,谢谢你呀,可是那样不行呀,我当初就是这么写的,你看看我第一个帖子。

这样写不行,我测试过了,根本不触发b_Click事件的,你试下就知道了。我原来也是觉得就该这么做了,可是不行。

//这个类是在WEB项目之外的另外一个类库里。
public class Class1
{
public void CreateButton()
{
Page currentPage = HttpContext.Current.Handler as Page;
Button b = new Button();
b.Click += new EventHandler(b_Click);
b.Text = "点一下看看";
currentPage.FindControl("form1").Controls.Add(b);
}

void b_Click(object sender, EventArgs e)
{
HttpContext.Current.Response.Write("调用了");
}
}
woodyy 2009-04-22
  • 打赏
  • 举报
回复
我想保持aspx.cs页面里protected void Page_Load(object sender, EventArgs e)

这个函数里,一行代码都没有,因为有其他的作用。
我姓区不姓区 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 woodyy 的回复:]
protected void Page_Load(object sender, EventArgs e)
{
Class1 cl = new Class1();
cl.CreateButton(new EventHandler(ButtonExcStep2_Click));
}
protected void ButtonExcStep2_Click(object sender, EventArgs e)
{
Response.Write("调用了");
}


可是这些代码,不是在aspx.cs页面里吗?
[/Quote]
你的意思是按钮的Click事件处理也在类库里?那不更简单吗:

public class Class1
{
public void CreateButton()
{
Page currentPage = HttpContext.Current.Handler as Page;
Button b = new Button();
b.Click += new EventHandler(b_Click);
b.Text = "点一下看看";
currentPage.FindControl("form1").Controls.Add(b);
}

void b_Click(object sender, EventArgs e)
{
HttpContext.Current.Response.Write("调用了");
}
}


woodyy 2009-04-22
  • 打赏
  • 举报
回复
protected void Page_Load(object sender, EventArgs e)
{
Class1 cl = new Class1();
cl.CreateButton(new EventHandler(ButtonExcStep2_Click));
}
protected void ButtonExcStep2_Click(object sender, EventArgs e)
{
Response.Write("调用了");
}


可是这些代码,不是在aspx.cs页面里吗?
woodyy 2009-04-22
  • 打赏
  • 举报
回复
小白,问你个问题,这个函数 protected override void CreateChildControls()

由谁来触发?无需触发吗?
我姓区不姓区 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 ojlovecd 的回复:]
引用 12 楼 woodyy 的回复:
天行健,很感谢你的回复。

我刚才说过了:

不想在UI层的aspx和aspx.cs上添加任何动态按钮相关的代码和控件,

全部由WEB项目之外的这个类库来完成这个功能。

你看清楚一点,我什么时候说在UI层添加动态按钮的代码了
我的例子里Class1就是你的类库中的类,你妹看到我是按照你的例子来写的吗
[/Quote]
妹->没
我姓区不姓区 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 woodyy 的回复:]
天行健,很感谢你的回复。

我刚才说过了:

不想在UI层的aspx和aspx.cs上添加任何动态按钮相关的代码和控件,

全部由WEB项目之外的这个类库来完成这个功能。
[/Quote]
你看清楚一点,我什么时候说在UI层添加动态按钮的代码了
我的例子里Class1就是你的类库中的类,你妹看到我是按照你的例子来写的吗
woodyy 2009-04-22
  • 打赏
  • 举报
回复
天行健,很感谢你的回复。

我刚才说过了:

不想在UI层的aspx和aspx.cs上添加任何动态按钮相关的代码和控件,

全部由WEB项目之外的这个类库来完成这个功能。
ak8800 2009-04-22
  • 打赏
  • 举报
回复
Controls 是一个区域,类似你代码中往页面里加控件的功能!
feifeiyiwen 2009-04-22
  • 打赏
  • 举报
回复
我也没看懂
sayluyun 2009-04-22
  • 打赏
  • 举报
回复
Controls UI层的对象
我姓区不姓区 2009-04-22
  • 打赏
  • 举报
回复
try:

public class Class1
{
public void CreateButton(EventHandler handler)
{
Page currentPage = HttpContext.Current.Handler as Page;
Button b = new Button();
b.Click += handler;
b.Text = "点一下看看";
currentPage.FindControl("form1").Controls.Add(b);
}
}



protected void Page_Load(object sender, EventArgs e)
{
Class1 cl = new Class1();
cl.CreateButton(new EventHandler(ButtonExcStep2_Click));
}
protected void ButtonExcStep2_Click(object sender, EventArgs e)
{
Response.Write("调用了");
}

woodyy 2009-04-22
  • 打赏
  • 举报
回复
谢谢小白。

你倒数第四、五、六行的Controls是什么?
加载更多回复(12)

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧