一:先用最简短的话说点理论的
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名称空间


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()是有区别的

五:理解控件的运行机制(例:基于Control命名空间的简单控件)的更多相关文章

  1. 七:理解控件的运行机制(例:基于CompositeControl命名空间的控件)

    组合控件与WebControl控件的事件和属性相差不大组合控件,顾名思义就是把一些控件组合起来形成一个控件这个控件将包含这些控件称为他的子控件 CompositeControl类实现了INameCon ...

  2. 六:理解控件的运行机制(例:基于WebControl命名空间的控件)

    Control类的Render方法在WebControl类中被被分成三部分1:RenderBeginTag,呈现标签的开始2:RenderContents,呈现标签的内容3:RenderEndTag, ...

  3. 四:理解Page类的运行机制(例:基于PageStatePersister的页面状态存取)

    有人说类似gridview datalist这样的控件最好不要用在高并发,IO大的网站中企业应用中为了快速开发到可以用一用因为这是一类"沉重"的组件我们姑且不谈这种看法的正确性(我 ...

  4. 二:理解ASP.NET的运行机制(例:基于HttpHandler的URL重写)

    url重写就是把一些类似article.aspx?id=28的路径重写成 article/28/这样的路径 当用户访问article/28/的时候我们通过asp.net把这个请求重定向到article ...

  5. 三:理解Page类的运行机制(例:在render方法中生成静态文件)

    我这里只写几个常用的事件1.OnPreInit:此事件后将加载个性化信息和主题2.OnInit:初始化页面中服务器控件的默认值但控件的状态没有加载,没有创建控件树3.OnPreLoad:控件完成状态和 ...

  6. 一:理解ASP.NET的运行机制(例:通过HttpModule来计算页面执行时间)

    一:简要介绍一下asp.net的执行步骤 1.IIS接收到客户请求 2. IIS把请求交给aspnet_isapi.dll处理 3.(如果是第一次运行程序)装载bin目录中的dll 4.(如果是第一次 ...

  7. 一张图,理解JAVA体系结构、运行机制、JVN运行机制、Java平台(初学)

    初学JAVA,学一门语言不仅仅是学其语法,逻辑思维能力,还有每一门语言都有自己独特的一方面,所以才有那么多语言要学啊 = =,所以想要真的学好语言,其编译机制,运行机制多少也要涉猎一些啊.这是初学JA ...

  8. 全面理解Java异常的运行机制

    1. 引子 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话. ...

  9. 万字长文,带你彻底理解EF Core5的运行机制,让你成为团队中的EF Core专家

    在EF Core 5中,有很多方式可以窥察工作流程中发生的事情,并与该信息进行交互.这些功能点包括日志记录,拦截,事件处理程序和一些超酷的最新出现的调试功能.EF团队甚至从Entity Framewo ...

随机推荐

  1. 理解shell的eval命令

    看以下两条命令:[zhangsan@XEN /sys]$ a="ls";b="\$a";c="$b";"$c"Hey! ...

  2. 2018-01-06自定义view时遇到的问题

    1.设置蒙版的简单写法: 2.

  3. Codeforces Round #540 (Div. 3)--1118F1 - Tree Cutting (Easy Version)

    https://codeforces.com/contest/1118/problem/F1 #include<bits/stdc++.h> using namespace std; in ...

  4. 转载:$(function() {}),即$(document).ready(function(),什么时候执行?以此为准,真理

    转载:https://blog.csdn.net/Ideality_hunter/article/details/77935656 $(function() { //执行操作 }); $(functi ...

  5. nodeclub

    nodeclub笔记:https://cnodejs.org/topic/535601a20d7d0faf140303d8 先看一下框架,把没有接触过的部分熟悉一下. 熟悉一下package.json ...

  6. 一些仪器的解码程序(delphi)

    http://www.jiandande.com/html/ITzixun-jishu/Lisyanjiuyuan/2013/0204/1600_3.html 看了后觉得不错,可能有需要的 ----- ...

  7. WPF实战案例-数据代理

    在我们wpf开发中,很多人会有mvvm模式去做wpf的项目. 是否有人遇到这样一个场景:在一个界面上,有个tabcontrol上面有4个页签,每个页签里面都有一个datagrid,里面显示的列基本一样 ...

  8. vue.js - 1

    最近开发公司vue前端项目,做一下笔记,偶尔上来查漏补缺 Vue指令之v-bind的三种用法 直接使用指令v-bind 使用简化指令: 在绑定的时候,拼接绑定内容::title="btnTi ...

  9. 《Python黑帽子:黑客与渗透测试编程之道》 玩转浏览器

    基于浏览器的中间人攻击: #coding=utf-8 import win32com.client import time import urlparse import urllib data_rec ...

  10. Distinct Substrings(spoj694)(sam(后缀自动机)||sa(后缀数组))

    Given a string, we need to find the total number of its distinct substrings. Input \(T-\) number of ...