zoukankan      html  css  js  c++  java
  • 简单实用的GroupBox控件

    1.功能介绍:可以像winform里的分组控件一样把web页面上的控件进行分组。功能虽小,但是实用。有时候我们在进行
                      web开发的时候,总是想用个这样的东西,把同一类属性或操作的控件放到一个区域里,可以让用户很清楚地
                      就能知道这是干什么的,给用户带来很好的体验。其实我最想做这样的东西了,有时候觉得这样的小东西,  
                      太简单,后来在看discuz源码的时候,在后台突然发现有这样的东西,我觉得很不错,就索性写了写,有那里
                       不好的地方还请大家批评指正。^_^
    2.界面
                  
    3。我们来看下代码。很简单。
    下面是:  RenderContents的代码。
               
    protected override void RenderContents(HtmlTextWriter writer)
            {
                
    //<fieldset style="border: green 1px solid; padding: 4px 30px 10px 30px;  margin-bottom: 8px;  text-align: left">
                
    //  <legend style="background:url(../images/users.jpg) no-repeat 6px 35% ;border: green 1px solid;PADDING-LEFT: 60px; FONT-WEIGHT: bold; LINE-HEIGHT: 45px">
                
    //      aaa
                
    //  </legend>
                
    //sdfgsdfgsdfg
                
    //</fieldset>
               
                writer.AddAttribute(HtmlTextWriterAttribute.Style, _fieldsetstyle);

                
    if (!Width.IsEmpty)
                {
                    writer.AddStyleAttribute(HtmlTextWriterStyle.Width, Width.ToString());
                }
                
    if (!Height.IsEmpty)
                {
                    writer.AddStyleAttribute(HtmlTextWriterStyle.Height, Height.ToString());
                }
                writer.RenderBeginTag(HtmlTextWriterTag.Fieldset);


                writer.AddAttribute(HtmlTextWriterAttribute.Style, _legendstyle);

                GroupTitle 
    = this.UniqueID.ToString();
                writer.RenderBeginTag(HtmlTextWriterTag.Legend);
                writer.Write(GroupTitle);
                writer.RenderEndTag();

                
    base.RenderContents(writer);

                writer.RenderEndTag();

                
                
            }
    4.上面为什么要用:RenderContents为什么不用Render方法呢?
     小结一下:
    WebControl基类中包括的两个方法:Render和RenderContents。Control基类中包括Render方法。由于WebControl类继承自Control类,因此,WebControl类中包含Render方法是无可非议的。然而,WebControl类中却有一个RenderContents方法,并且该方法与Render方法在功能、参数等方面都非常相似。那么在呈现控件过程中到底应该使用哪一个呢?

      实际上,在通常情况下,如果服务器控件自WebControl基类派生,那么其中的Render方法很少使用,而主要使用RenderContents方法实现控件呈现。为了说明其中的原因,我们必须了解WebControl基类中Render方法的实现逻辑。

      在WebControl基类中的Render方法的实现示意性代码如下所示:

    protected override void Render(HtmlTextWriter output)
    {
     RenderBeginTag(output);
     RenderContents(output);
     RenderEndTag(output);
    }

    在WebControl基类中的RenderBeginTag方法的实现示意性代码如下:
    public virtual void RenderBeginTag(HtmlTextWriter output)
    {
     AddAttributesToRender(output); 
     HtmlTextWriterTag tagKey 
    = TagKey;
     
    if(tagKey != HtmlTextWriterTag.Unknown)
     {
      output.RenderBeginTag(tagKey); 
     } 
    else {
      output.RenderBeginTag(
    this.TagName);
     }
    }

    在WebControl基类中的RenderContents方法的实现示意性代码如下:
    protected override void RenderContents(HtmlTextWriter output){ 
     
    //使用默认逻辑来呈现子控件,那么一定要调用基类中的方法。 
     base.Render(output);
    }

    分析以上代码可以得出以下结论:

      一、为了在由WebControl派生的类中实现控件呈现,必须重写AddAttributesToRender、RenderBeginTag、RenderEndTag、RenderContents等方法中的一个或者多个,而不必重写Render方法。

      二、重写AddAttributesToRender、RenderBeginTag、RenderEndTag、RenderContents等方法非常重要(请注意重写这些方法的条件及注意事项),否则服务器控件可能会出现丢失标签的情况,这将严重影响服务器控件的呈现。

      三、当呈现服务器控件标签中的内容时,必须重写RenderContents方法。

      上文介绍了WebControl类的一些基本知识。尤其是对于上文所列举的示意性代码需要重点理解。这对于实现控件呈现有着重要作用。


    5.源代码下载
    下载:/Files/HeroBeast/groupbox.rar

    欢迎大家加入 "小强控件园" ,有更多惊喜等着你,进入小强控件园
    工欲善其事,必先利其器

  • 相关阅读:
    :::宁夏汇川服装有限公司:::
    Zzgen@2015
    新中装
    柯桥有了高级西服定制机构上万元的西服已订出10多套(图)_网易新闻中心
    联系方式-北京美达琳服装有限责任公司
    THOMAS MASON--英国顶级衬衫面料品牌
    tessilstrona
    古特曼上海
    老舍茶馆|北京老舍茶馆|老舍茶馆门票|老舍茶馆官方网站
    SANSA 上上洛可可 贾伟作品 高山流水 香炉 香插香台香具 高端商务礼品 黑色【正品 价格 图片 折扣 评论】_尚品网ShangPin.com
  • 原文地址:https://www.cnblogs.com/HeroBeast/p/1043720.html
Copyright © 2011-2022 走看看