首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >五:理解控件的运行机制(例:基于Control命名空间的简单控件)

五:理解控件的运行机制(例:基于Control命名空间的简单控件)

作者头像
liulun
发布2022-05-08 17:57:21
发布2022-05-08 17:57:21
4660
举报
文章被收录于专栏:liulunliulun

一:先用最简短的话说点理论的 1.asp.net中所有的标准控件都可以重写 2.和控件相关的命名空间有   System.Web.UI.Control 是所有控件的基类 只提供简单的呈现逻辑,不支持样式表   System.Web.UI.WebControls.WebControl 继承自Control 支持控件外观   System.Web.UI.WebControls.CompositeControl 继承自WebControl类 派生出多个控件合成的复合控件 3.控件树的实现原理 首先Page类本身就是一个控件,它继承自Control 所有的控件都有一个Render方法 这个方法负责把控件的内容发送给请求者 在Render方法中会调用一个RenderChildren方法 RenderChildren方法触发所有子控件的生成行为 子控件又有Render方法 子子孙孙无穷尽也... 这就实现了控件树 二开始看例子 建立一个工程 在工程下建立一个类库 其中有一个类,继承自Control类 注意类库要引用web名称空间

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
namespace hellowControl
{
    public class HellowControl:Control
    {
        protected override void Render(HtmlTextWriter writer)
        {
            //要先写div的样式
            writer.AddStyleAttribute(HtmlTextWriterStyle.TextAlign, "center");
            writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "180px");
            writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "180px");
            writer.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth, "1px");
            writer.AddStyleAttribute(HtmlTextWriterStyle.BorderStyle, "solid");
            writer.AddStyleAttribute(HtmlTextWriterStyle.BorderColor, "grey");
            //再写div开始标签
            writer.RenderBeginTag(HtmlTextWriterTag.Div);
            //开始写div里的内容,是一个图片
            //先写图片的样式和属性
            writer.AddAttribute(HtmlTextWriterAttribute.Src, "noimage_s.jpg");
            writer.AddStyleAttribute(HtmlTextWriterStyle.Margin, "8px");
            //写image标签开始
            writer.RenderBeginTag(HtmlTextWriterTag.Img);
            //闭合image标签
            writer.RenderEndTag();
            //闭合div标签
            writer.RenderEndTag();
        }
    }
}

个人感觉这个逻辑有点怪异 除了这些也不多说了 然后生成这个类库 你将得到一个dll文件 在你的工具箱中点右键>>>选择项 浏览找到刚才的dll 然后你会发现,你的工具箱里多了一个控件 拖到你的页面就能使用了 这里注意writer.WriteBeginTag()等方法 和writer.RenderBeginTag()是有区别的

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2009-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档