ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 自定义控件的构建(1)

自定义控件的构建(1)

原创 Linux操作系统 作者:wsx2miao 时间:2011-01-24 17:08:16 0 删除 编辑

其 实ASP.NET Framework本身已经为我们提供足够多的控件了,初学者接触ASP.NET时,多是从拖控件开始着手的,那么这种方式用了久了之后,如果想知道这背 后的机制是怎样的,那么,这时候可以通过自定义控件这一系列步骤来理解这背后ASP.NET为我们做了哪些事情。

我们从以下两个问题开始入手:1,需要编写什么类型的控件?

                                       2,从什么类继承

      自定义控件分为两种形式:完全生成控件和组合控件,这个很好理解,对于构建完全生成控件,可以指定控件呈现在浏览器的HTML,创建组合控件时,可以从已有控件构建新的控件。

      构建基础控件时,需要选择新控件的基类,这里有3种选择

                System.Web.UI.Controls

                System.Web.UI.WebControls.WebControl

                System.Web.UI.WebControls.CompositeControl

     CompositeControl从WebControl类继承而来,WebControl则继承自 Controls,System.Web.UI.Controls类是ASP.NET所有控件的基类,比如TextBox,GridView都是派生自该 控件,其包含的所有属性,方法,事件都共享给框架内所有控件,而Web控件则从 System.Web.UI.WebControls.WebControl类继承,Control类和WebControl类不同之处在于,后者派生出 的控件总是包含开始和结束标签,也正是因为如此,WebControl能够获得更多的格式化选项,比如BackColor,Font等属性

这里举个例子:Literal控件继承自Control类,Lable继承自WebControl基类。

构建完全生成控件

这里定义的FullRenderControl控件是从Control基类继承

namespace MyControls
{ 
    public class FullRenderControl : Control
    {
        public string Text
        {
            get;
            set;
        }
        /// 
        /// 重写基类的Render()
        /// 
        /// 
        protected override void Render(HtmlTextWriter writer)
        {
            writer.Write(Text);
        }
     }
}
代码重写了基类的Render(),其功能是通过HtmlTextWriter类的Writer()将其写至浏览器上。

下面代码展示了如何使用

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestFullRenderControl.aspx.cs" Inherits="_Default" %>
<%@ Register TagPrefix="fullrender" Namespace="MyControls" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>title>
head>
<body>
    <form id="form1" runat="server">
    <div>
    <fullrender:FullRenderControl ID="FullRenderControl1" Text="Hello!" runat="server">fullrender:FullRenderControl>
    div>
 form>
body>
html>

自定义控件需要通过<%@ Register%>指令在页面进行注册,也可以在Web.config中的节里注册,这时候运行程序可以看到界面上呈现字符串Hello!

下面定义的控件是从WebControl基类继承而来

namespace MyControls
{   
     /// 
     /// 继承WebControl基类
     /// 
    public class FullRenderWebControl:WebControl
    {
        public string Text
        {
            get;
            set;
        }
        protected override void RenderContents(HtmlTextWriter writer)
        {
            writer.Write(Text);
        }       
    }
}

开头已提过,继承WebControl类创建完全控件要比Control类多继承一些属性,从前者继承时,用RenderContents()代替Render()

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestFullRenderControl.aspx.cs" Inherits="_Default" %>
<%@ Register TagPrefix="fullrender" Namespace="MyControls" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>title>
head>
<body>
    <form id="form1" runat="server">
    <fullrender:FullRenderWebControl ID="FullRenderWebControl1" Text="Hello!" BackColor="ActiveBorder" runat="server" /> 
    form>
body>
html>
这段代码展示了如何使用FullRenderWebControl控件,因为从WebControl类继承,可以看到其获得了BackColor这类属性

显示界面:QQ截图未命名 查看源代码,界面HTML标签渲染为

 <span id="FullRenderWebControl1" style="background-color:activeborder;">Hello!span>

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25284529/viewspace-684556/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-01-22

  • 博文量
    45
  • 访问量
    43466