CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

请教动态生成用户控件的问题

楼主piaoran81(飘然)2002-05-08 09:36:24 在 .NET技术 / ASP.NET 提问

我使用vb.net,在一个button的click事件中动态生成几个用户控件实例,然后想在另一个button的click事件中读取这些实例的属性,不知如何引用这些实例,原来是用的方法是和生成时一样采用"实例名=page.loadcontrol("用户控件")",这样好象不行,感觉重新生成实例了,陷入无助状态,很无奈,而且很着急!!请高手们指教,万分感谢!!! 问题点数:40、回复次数:9Top

1 楼sqhua(拉长弓兮射天狼)回复于 2002-05-08 09:40:45 得分 0

没有用过VB.net,我用的是C#,但道理应该一样:  
   
  用动态方法生成的控件,在生成后(New)到加入页面(Add)的过程中,可以指定它的ID,这样,要引用这些控件时,只要FindControl(“ID")就可以了。Top

2 楼icyer()回复于 2002-05-08 09:43:58 得分 20

最好能放在Page_Load中。  
  如果放在其他事件里,当页面返回刷新的时候,控件就会消失。  
  Top

3 楼yunhi()回复于 2002-05-08 10:11:59 得分 20

除了Page_Load中,你还可以在页面初始化的时候动态生成控件(不过Page_Load我没试过),也就是在:  
  ......  
  protected   System.Web.UI.HtmlControls.HtmlTable   table1;  
  ......  
  override   protected   void   OnInit(EventArgs   e)  
  {  
  //  
  //   你要动态生成控件的代码  
  InitializeComponent();  
  base.OnInit(e);  
  }  
   
  例如在一个aspx文件中你有一个HTML   server   control   “table1”:  
   
  <table   id="table1"   width="100%"   border="1"   runat="server">  
  </table>  
  你在系统初始化时加入如下代码:  
  override   protected   void   OnInit(EventArgs   e)  
  {  
  HtmlTableRow   tr   =   new   HtmlTableRow();  
  table1.Controls.Add(tr);  
  tr.BorderColor="Brown";  
  tr.ID="TR";  
   
  HtmlTableCell   tc   =   new   HtmlTableCell();  
  tr.Controls.Add(tc);  
  tc.VAlign="Center";  
  tc.Align="Center";  
  tc.InnerText="序号";  
  tc.ID="TC";  
  InitializeComponent();  
  base.OnInit(e);  
  }  
  那么你就可以通过server   control的FindControl方法找到你要的控件例如:  
  HtmlTableCell   MyControl=(HtmlTableCell)table1.Controls[1].FindControl("TC");  
   
  Top

4 楼piaoran81(飘然)回复于 2002-05-08 10:16:04 得分 0

还是不太明白,呵呵,因为使用findcontrol("id")后出现   “未将对象引用设置到对象的实例”的问题,也就是说,引用未成功,对吗?我想把代码给出来,请指正好吗?  
   
  <%@   Register   TagPrefix="Upload"   TagName="Question"   Src="uploadQuestion.ascx"   %>  
   
  <script   runat="server"   language="vb">  
          dim   UploadQuestion   as   uploadQuestion_ascx  
   
          sub   ModeOK_Click(obj   as   object,e   as   eventargs)  
                  UploadQuestion=Page.LoadControl("uploadQuestion.ascx")  
                  UploadQuestion.ID="UploadQuestions"  
                  UploadQuestion.Question="hello"  
                  pnlUpload.Controls.Add(UploadQuestion)//pnlUpload是一个模扳  
          end   sub  
   
          sub   UploadOK_Click(obj   as   object,e   as   eventargs)  
                  dim   question   as   string  
                  UploadQuestion=page.FindControl("UploadQuestions")  
                  question=UploadQuestion.Question//此句出现错误提示  
                  response.write(question)  
                  response.end  
          end   sub  
  </script>  
             
  代码就是这样了,请指点!  
  另外,我需要的是点击后动态生成,所以,不能放在page_load中,控件消失后,是不是说,控件就不存在了,不能再被引用了?  
   
   
  Top

5 楼icyer()回复于 2002-05-08 10:21:29 得分 0

是的。ASP.NET把页面控件信息存放在ViewState里面,下次返回的时候就读取ViewState里面的数据,所以很多控件状态在页面返回刷新之后还存在。  
  而动态添加的控件并没有被放在ViewState里面,所以下次返回刷新的时候,就不会Load这些控件,当然也就不能访问了。  
  Top

6 楼yunhi()回复于 2002-05-08 11:01:06 得分 0

你将ModeOK_Click事件的代码放到  
  override   protected   void   OnInit(EventArgs   e)  
  {  
  //  
  //   你要动态生成控件的代码  
  InitializeComponent();  
  base.OnInit(e);  
  }  
  //试一试Top

7 楼piaoran81(飘然)回复于 2002-05-08 11:01:40 得分 0

关键是我必须选择好一些条件后才能生成控件,所以才采用动态生成的方法,像我代码写的那样,我把生成用户控件的代码放在了ModeOK_Click中,而引用是在UploadOK_Click中,就是说选择好了模式后,我才动态生成用户控件,然后想引用用户控件里边的属性Quetion(一个字符串类型),此时,点击UploadOK这个按钮,页面重新刷新了,所以,控件也就没了,这样的话,我的想法就无法实现了!不知有什么好的方法解决呢?!Top

8 楼icyer()回复于 2002-05-09 13:08:14 得分 0

在页面添加好控件,然后在代码里控制Visible属性。  
  Top

9 楼yunhi()回复于 2002-05-10 00:21:00 得分 0

你还可以选择好条件后,Redirect到另一页,通过取得上一页的Session或Request对象得到你选择的条件,然后在初始化页面的时候生成控件。Top

相关问题

  • 如何正确删除动态生成的用户控件?
  • 请问怎样才能动态生成控件?用户输入一个数值,程序能在视或窗体中动态生成相应数目的控件。
  • 如何动态生成控件实例?
  • TreeView和动态生成控件
  • 有关动态生成控件数组
  • 请问怎样动态生成控件
  • 怎样动态的生成控件?
  • 动态生成和显示控件
  • 动态生成控件问题!
  • 关于VB的动态生成控件

关键词

  • vb.net
  • 控件
  • 代码
  • 页面
  • 用户
  • 属性
  • 选择
  • 动态生成
  • 生成
  • 引用

得分解答快速导航

  • 帖主:piaoran81
  • icyer
  • yunhi

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo