简单实用的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

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

转载于:https://www.cnblogs.com/HeroBeast/archive/2008/01/18/1043720.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值