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

 所属目录:Java   |   类型:技术问答   |   时间:2007-05-21
 问题:

对不起,我今天不能开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  
 

· 网友精彩回答:

发表者:hackate

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

.
处理 SSI 文件时出错
© 2006-2008 All Rights Reserved