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

控件修正,样式输不出,主要由于Render中MyBase.Render(output)你没写。(hackate确认)

楼主rickjelly2004(每逢佳节倍思亲-------------快乐生活)2005-07-04 08:53:51 在 .NET技术 / ASP.NET 提问

对不起,我今天不能开MSN,所以就不能发给你了,我只能在CSDN上开一张贴,发给你。  
   
  控件我修正了一点,代码也给你简化了一些,一般做控件你的代码可以了,不过如果你还要加子控件的话,你可以在CREATECHILDCONTROL中加入你要的控件。  
  在RENDER中要加一个ME。ENSURECHILDCONTROL(),这句话是判断是不是创件了子控件,如果没有的话,它会到CREATECHILDCONTROL这个SUB中执行  
   
  记住有的控件还要加BUILDER和DESIGN  
  其他的要你自己摸索,不过你可以看看我的BLOG上的那些控件,那写比较的经典。  
   
   
  定时刷新页面控件(hackate),修正后的代码:  
  Imports   System.Web.UI  
  Imports   System.Web.UI.WebControls  
  Imports   System.Collections  
  Imports   System.Text  
  Imports   System.ComponentModel  
  Imports   Microsoft.VisualBasic  
   
  <DefaultProperty("Text"),   DefaultEvent("Timer"),   ToolboxData("<{0}:setTimeoutControl   runat=server></{0}:setTimeoutControl>")>   Public   Class   setTimeoutControl  
          Inherits   System.Web.UI.WebControls.WebControl  
          Implements   IPostBackEventHandler  
          Private   Shared   EventTimer   As   Object   =   New   Object  
          Public   Event   Timer   As   EventHandler  
   
  #Region   "Property"  
          Public   Overrides   Property   Visible()   As   Boolean  
                  Get  
                          Return   MyBase.Visible  
                  End   Get  
                  Set(ByVal   Value   As   Boolean)  
                          MyBase.Visible   =   Value  
                  End   Set  
          End   Property  
   
          Public   Overrides   Property   Width()   As   System.Web.UI.WebControls.Unit  
                  Get  
                          Return   MyBase.Width  
                  End   Get  
                  Set(ByVal   Value   As   System.Web.UI.WebControls.Unit)  
                          MyBase.Width   =   Value  
                  End   Set  
          End   Property  
   
          Public   Overrides   Property   Height()   As   System.Web.UI.WebControls.Unit  
                  Get  
                          Return   MyBase.Height  
                  End   Get  
                  Set(ByVal   Value   As   System.Web.UI.WebControls.Unit)  
                          MyBase.Height   =   Value  
                  End   Set  
          End   Property  
   
          <DefaultValue(3000),   Bindable(False),   Description("duration   millisecound")>   Public   Property   Interval()   As   Integer  
                  Get  
                          Return   viewstate("_interval")  
                  End   Get  
                  Set(ByVal   Value   As   Integer)  
                          viewstate("_interval")   =   Value  
                  End   Set  
          End   Property  
   
          <DefaultValue(False),   Bindable(False),   Description("Enabled   Timer")>   Public   Overrides   Property   Enabled()   As   Boolean  
                  Get  
                          Return   MyBase.Enabled  
                  End   Get  
                  Set(ByVal   Value   As   Boolean)  
                          MyBase.Enabled   =   Value  
                  End   Set  
          End   Property  
  #End   Region  
   
          Protected   Overridable   Sub   OnTimer(ByVal   e   As   EventArgs)  
                  RaiseEvent   Timer(Me,   e)  
          End   Sub  
   
          Public   Sub   RaisePostBackEvent(ByVal   eventArgument   As   String)   Implements   System.Web.UI.IPostBackEventHandler.RaisePostBackEvent  
                  If   eventArgument   =   "OnTimer"   Then  
                          OnTimer(EventArgs.Empty)  
                  End   If  
          End   Sub  
   
          Private   Function   bulidJavaScript()   As   String  
                  Dim   sb   As   StringBuilder   =   New   StringBuilder  
                  sb.Append(Chr(10)   &   "<script   language='javascript'>")  
                  sb.Append(Chr(10)   &   "   setTimeout("""   &   Me.Page.GetPostBackEventReference(Me,   "OnTimer")   &   ""","   &   viewstate("_interval").ToString   &   ");")  
                  sb.Append(Chr(10)   &   "</script>")  
                  Return   sb.ToString  
          End   Function  
   
          Protected   Overrides   Sub   Render(ByVal   output   As   System.Web.UI.HtmlTextWriter)  
                  Me.EnsureChildControls()  
                  If   MyBase.Enabled   =   True   Then  
                          output.Write(bulidJavaScript)  
                          MyBase.Render(output)  
                  End   If  
          End   Sub  
   
          Public   Sub   New()  
                  MyBase.Height   =   System.Web.UI.WebControls.Unit.Pixel(10)  
                  MyBase.Width   =   System.Web.UI.WebControls.Unit.Pixel(120)  
                  Me.Interval   =   3000  
          End   Sub  
  End   Class  
  问题点数:20、回复次数:11Top

1 楼hackate(兰花开香入梦境,独思佳人亦飘然!!)回复于 2005-07-04 09:53:24 得分 0

感谢ricy大哥。哈哈。是这个问题啊!  
   
  谢谢哦。继续学习ING。。。!Top

2 楼hackate(兰花开香入梦境,独思佳人亦飘然!!)回复于 2005-07-04 10:26:37 得分 20

继承control这个基类是没有UI支持的,是不是这个原因导致的呢?  
  那么用webcontrol是可以达到效果。然后用了webcontrol基类后应该还可以重写onprerender方法。  
   
  这里为何要用viewstate取代呢?Top

3 楼rickjelly2004(每逢佳节倍思亲-------------快乐生活)回复于 2005-07-04 10:40:36 得分 0

viewstate取代  
  我之所以用VIEWSTATE,就是为了你在页面中调用的时候数据不丢失,以前我做的时候也是用变量,不过发现在页面中调用的时候,尤其是在后台代码中改变他的属性时候:例如:setTimeoutControl   .Interval=1200  
   
  你虽然改变了,但是页面一提交,你就会发现你改动的值不见了,还是你在设计阶段设置属性设置的值  
   
  还有如果你将来用到复合控件的话,记得要对CONTROLS这个属性要重载,不然你也会发现很多的问题,比如数据丢失等等Top

4 楼hackate(兰花开香入梦境,独思佳人亦飘然!!)回复于 2005-07-04 11:00:18 得分 0

在问一下,这里的  
        Public   Sub   New()  
                  MyBase.Height   =   System.Web.UI.WebControls.Unit.Pixel(10)  
                  MyBase.Width   =   System.Web.UI.WebControls.Unit.Pixel(120)  
                  Me.Interval   =   3000  
          End   Sub  
  构造函数的执行顺序呢,这个我不知道他的执行顺序是怎么样的,我是说他在控件生命周期里,没见到它的影子,他在这里具体扮演的是什么一个角色呢?  
  一般这里new里面的代码都写在页面上面。。  
   
  能解释下吗?rick大哥,我比较笨Top

5 楼rickjelly2004(每逢佳节倍思亲-------------快乐生活)回复于 2005-07-04 11:14:01 得分 0

一般控件分设计阶段和运行阶段  
  在设计阶段包括:你从工具栏中拖控件到页面上,这个时候,它会进NEW这个SUB,把控件的属性等等初始化一下,  
  运行的时候它也回进这个SUB  
   
  我知道一个类都必须实例化  
  DIM   S   AS   类  
   
  S=NEW   类  
  对不对啊??  
  而我写的NEW在很大程度上就是为了设计阶段初始化控件Top

6 楼hackate(兰花开香入梦境,独思佳人亦飘然!!)回复于 2005-07-04 11:25:27 得分 0

那这之间我要是修改了控件的属性,譬如说是在右边的属性器里面修改了控件的某个属性,会不会在你说的运行的时候,这个new构造函数执行了,把其又覆盖过去呢?我是担心这一点?Top

7 楼rickjelly2004(每逢佳节倍思亲-------------快乐生活)回复于 2005-07-04 12:07:50 得分 0

不会的,NEW后还会执行其他的代码,根据HTML代码它还会读实际的值的,所以你不要担心,它会把属性的值读出来的抛到前台的,  
  Top

8 楼hackate(兰花开香入梦境,独思佳人亦飘然!!)回复于 2005-07-04 12:41:08 得分 0

恩,明白了!  
  rick大哥,如果说要给控件样式,比如说控件拉到设计视图后看到的效果那些要如何修改,修改成自己图形的控件或者说如何给我们的控件啊,设置图标啊。这些的,好像在SDK里没找到。。不知道哪有参考教程等,谢谢Top

9 楼rickjelly2004(每逢佳节倍思亲-------------快乐生活)回复于 2005-07-04 14:19:03 得分 0

首先你要要放一个图片资源:  
  工程中设置你要的图片就可以了Top

10 楼hackate(兰花开香入梦境,独思佳人亦飘然!!)回复于 2005-07-04 14:33:52 得分 0

恩,谢谢RICK大哥,恩,我会一直努力进步。。  
   
  让你浪费了20分。。。真抱歉。。这分应该是我给才对。。  
   
  再次感谢,我以后如果有碰到什么问题,我会短信请教,谢谢Top

11 楼rickjelly2004(每逢佳节倍思亲-------------快乐生活)回复于 2005-07-04 14:46:47 得分 0

分就不用了,以前还想要分的,现在不想了,呵呵  
  不过做控件大家讨论讨论!,共同进步!Top

相关问题

  • 退出确认?
  • 给个确认
  • ID确认!!
  • asp.net确认框
  • 弹出确认框?
  • 客户端确认
  • 怎么实现确认框?
  • 触发器重新确认
  • 样用jsp发确认信?
  • 用msgbox来确认消息

关键词

  • 控件
  • 修正
  • 代码
  • 页面
  • me
  • mybase
  • render
  • webcontrol
  • ui
  • interval

得分解答快速导航

  • 帖主:rickjelly2004
  • hackate

相关链接

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

广告也精彩

反馈

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