您的位置:首页 > 编程语言 > ASP

asp.net组件(8)控件的层次结构和WebControl

2007-12-19 22:18 483 查看
HTML服务器控件的控件从System.Web.UI.HtmlControls.HtmlControl 类派生

标准服务器控件的控件从System.Web.UI.WebControls.WebControl 类派生

HtmlControl 类和WebControl 类则从System.Web.UI.Control 类派生,并扩展.

前面我们都是使用Control来派生.我们有很多事需要自己做.如果使用WebControl我们可以方便不少.

当然要看情况而定.

怎样才能比较直观的看出它们的差别呢?

using System;

using System.Web.UI;

using System.Web.UI.WebControls;

namespace WebComponent

把以上几个控件都加入页面中.点下页面看下属性编辑器.就会发现差别了.

asp:Label相信大家很熟悉了.它便是继承至WebControl控件.

拉入一个Label控件.运行 <span id="Label1">Label</span>

asp.net把Label翻译成span这个标签.

那要是我不想要span,我想要div行吗.

当然可以.

public class WebStudy3Component : Label

{

protected override System.Web.UI.HtmlTextWriterTag TagKey

{

get

{

//return base.TagKey; 此标签便是span

return System.Web.UI.HtmlTextWriterTag.Div;

}

}

}

运行程序.<div id="WebStudy3Component1"></div>

完成了第一步

接下来我们就来研究下<div id="WebStudy3Component1"></div>是怎么出来的.

我们先来看看继承至Control的控件是怎么实现这个的

public class Control1 : Control

那继承至WebControl呢?我都没有绘.它是怎么出来呢?

public class WebStudy1Component : Label

public class WebStudy1Component : WebControl

{

protected override void Render(HtmlTextWriter writer)

{

/**//*

* 首先RenderBeginTag被调用 画出<table>

* 接着RenderContents被调用 画出内容

* 最后RenderEndTag被调用 画出</table>

*/

base.Render(writer);

}

protected override HtmlTextWriterTag TagKey

{

get

{

//return base.TagKey;

return HtmlTextWriterTag.Table;

}

}

protected override void AddAttributesToRender(HtmlTextWriter writer)

{

writer.AddAttribute(HtmlTextWriterAttribute.Width, "500");

writer.AddStyleAttribute(HtmlTextWriterStyle.BackgroundColor, "#f5f5f5");

base.AddAttributesToRender(writer);

}

public override void RenderBeginTag(HtmlTextWriter writer)

{

//在这里调用了AddAttributesToRender 和组件(2)中有说到样式在标签之前画出.

base.RenderBeginTag(writer);

}

protected override void RenderContents(HtmlTextWriter writer)

{

writer.RenderBeginTag(HtmlTextWriterTag.Tr);

writer.RenderBeginTag(HtmlTextWriterTag.Td);

writer.Write("阿鹏");

writer.RenderEndTag();

writer.RenderEndTag();

//base.RenderContents(writer);

}

public override void RenderEndTag(HtmlTextWriter writer)

{

base.RenderEndTag(writer);

}

}
可见继承WebControl中绘制控件.主要工作已经转移到RenderContents(HtmlTextWriter writer)里了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
-->
新的分享
章节导航