zoukankan      html  css  js  c++  java
  • 五:理解控件的运行机制(例:基于Control命名空间的简单控件)

    一:先用最简短的话说点理论的
    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()是有区别的

  • 相关阅读:
    阿里云OSS进行文件下载时,报NOSuchKeys: com.aliyun.oss.OSSException: The specified key does not exist.
    [JAVA异常]ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2 JDWP exit erro
    mybatis 中的<![CDATA[ ]]>
    HttpClients.custom的创建
    RestTemplate可以自定义重试次数
    RegxUtils正则表达式工具类
    MYSQL中 != 和 is not的区别
    ccna ccnp ccie 区别
    【IDEA】IDEA SpringBoot访问不到webapp下的内容
    日志 | logback | logback-spring.xml
  • 原文地址:https://www.cnblogs.com/lizhizhang/p/4926393.html
Copyright © 2011-2022 走看看