动态添加的BUTTON控件不响应CLICK事件

wodeceshi 2013-05-22 06:07:26
小弟在页面上动态添加了几个BUTTON,都添加了CLICK事件。。。但是单击以后不响应。。。请大神帮助!!谢谢!!!


private void add_line(int userID,string userName,string sex,string address,string birthday)
{
Panel p1 = new Panel();
Button b1 = new Button();
b1.Text = "添加";
b1.ID = "b" + itemsCount;
b1.Click += new System.EventHandler(this.b1_Click);
p1.Controls.Add(tb);
p1.Controls.Add(b1);
p1.Height = 30;
this.Panel2.Controls.Add(p1);
itemsCount++;
}

public void b1_Click(object sender, EventArgs e)
{
Button b1 = sender as Button;
int control_id = int.Parse(b1.ID.Substring(1));
mani_friends.add_new_friends("1",control_id.ToString());
}

我在b1_Click中设了断电,但是调试的时候没在断点停。。。真郁闷。。。
...全文
681 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Conmajia 2013-05-26
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
不要随便写代码来动态增加控件。这是专业的asp.net程序员干的事情。大多数asp.net程序员都是只学一点入门书上的知识,根本不会进行asp.net控件开发,根本不深入了解asp.net机制,那么此时你就应该先老老实实地使用GridView、ListView、DataList等控件。 如果你要学习asp.net控件开发知识(尽管,我认为asp.net这种非常伟大的技术已经过时好多年了),那么你就要系统地花半年时间去学习,而不要靠简单地摸索。 所以你需要决定到底是要去学习asp.net控件开发、还是停留在肤浅地“会用一些常用控件就行”的程度,二者选一。没有中间状态。 有很多人都会说“别跟我废话啦,只要告诉我怎么实现代码,让我抄袭一遍就行啦!”,这样就根本做不了专业的asp.net程序设计工程师,只能是熟练的抄袭别人代码的系统维护人员。那么他就别打算学会这里的开发。
  • 打赏
  • 举报
回复
很难说你的代码应该怎样修改,因为有一大堆bug,而且你给的信息根本不足以确定正确的流程是什么。只能给你说一下基本的原理,让你自己稍微懂一点,无法准确地进行程序设计: 你写的 b1.Click 毫无意义,因为动态添加的控件在执行到页面的 Render 之后,页面对象就销毁了,就不存在了。下一次回发时,asp.net重新建立了此页面的新的对象实例,在这个新的页面中根本没有这个p1,更别提 b1.Click的注册了。即使是asp.net打算把ViewState以及Post中的数据设置给控件树,由于这个 p1 根本不存在,于是也就自动忽略了它,所以你看不到 p1 同时也触发不了 b1.Click。 那么有可能怎样编程呢?你的信息太少,根本不知道应该如何设计程序。胡乱举个例子:
protected void Page_Load(object sender, EventArgs e)
{
        Panel p1 = new Panel();
        Button b1 = new Button();
        b1.ID = "b" + itemsCount;
        b1.Click += new System.EventHandler(this.b1_Click);
        p1.Controls.Add(tb);
        p1.Controls.Add(b1);
        this.Panel2.Controls.Add(p1);
}
这样重建控件树并且重新定义事件监听,那么asp.net就会从ViewState中把相应控件的Text和Height属性给它重新填进来,并且随后把post的数据也填进来,并且在页面load过程结束之后触发b1.Click。 但是上述代码不一定是对的。因为看你贴出的代码,貌似你打算动态地添加多个p1,而不是一个。我现在懒得再讨论asp.net了,希望你搞懂asp.net的页面生命机制再编写动态添加控件的程序。如果你没有懂得asp.net的控件开发机制,那么就老老实实地使用DataList或者Repeater控件吧(那个bt以及b1都是是在设计页面上用鼠标拖拉设计模板内容就行了),不要自己写代码。 http://bbs.csdn.net/topics/380169102 我反复说过一个最简单的测试。我们可以用这个最简单的东西看看每一个人是否理解asp.net编程。你可以简单地往页面上拖一个button控件,然后其后台click事件中什么都不做。这就ok了!然后你在调试自己的程序时可以随时随意地点击这个按钮。显然,这个按钮什么具体的自定义代码都不做,那么当它被点击并且服务器上处理完这个click之后: 1. 你再在前端页面上显然应该看到任何界面都没有改变,什么也没有丢失、也没有混乱。 2. 同时假设你的动态内容有读取数据库的动作的话,你应该监测到没有任何读取数据重新来绑定控件之类的动作,因为这个按钮根本不做什么事情。如果要重新查询数据库并且引起一大堆控件重新绑定,可见程序性能低到极点。 你的程序能够通过这个简单的测试吗?如果不能,那么从头理解asp.net编程,还不晚。许多人写的asp.net程序在这个最初级的测试下都是一塌糊涂经不起检验的,这样的程序甚至可能被用到博客上、教程上,变成了坑害学生的范例了。
游戏人间 2013-05-25
  • 打赏
  • 举报
回复
add_line 方法不能放在 if(!Page.IsPostBack) 里面
wodeceshi 2013-05-24
  • 打赏
  • 举报
回复
引用 5 楼 icdbow 的回复:
目测代码没有什么问题,你可以这样弄,拖一个按钮控件放到窗体上,设置Click事件,然后打开相应的窗体的Designer文件,把相应的代码剪贴过来就可以了。
我这个是网页。。。貌似忘了说了 运行以后 拖好的BUTTON和动态添加的BUTTON的html代码一样。。
wodeceshi 2013-05-24
  • 打赏
  • 举报
回复
引用 4 楼 xiaogui340 的回复:
p1.Controls.Add(tb);这段不要试试看,是不是布局问题?
试过了。。。不行。。。
LADYGAGA_XB 2013-05-24
  • 打赏
  • 举报
回复
重启电脑.. 或者重新编译一下代码就可以了.. 或者随便拖个新的按钮. 双击进去写点东西. 看看能不能进断点. 看看鼠标的Click事件里面有没有绑定. 一般来说重新编译一下就好了.
Code従業員 2013-05-24
  • 打赏
  • 举报
回复
目测代码没有什么问题,你可以这样弄,拖一个按钮控件放到窗体上,设置Click事件,然后打开相应的窗体的Designer文件,把相应的代码剪贴过来就可以了。
xiaogui340 2013-05-24
  • 打赏
  • 举报
回复
p1.Controls.Add(tb);这段不要试试看,是不是布局问题?
wodeceshi 2013-05-23
  • 打赏
  • 举报
回复
动态添加的按钮,响应LOAD和INIT事件都没问题,唯独不响应CLICK事件。。。求帮助啊
wodeceshi 2013-05-22
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
设置下autopostback=true
您说的是哪个控件的autopostback?
threenewbee 2013-05-22
  • 打赏
  • 举报
回复
设置下autopostback=true

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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