• 控件开发复习


    建立一个新控件,从增加一个普通类的方法开始
    问题1、要从哪一个类继承过来?Control、WebControl、CompositeControl?
    答:我基本上都是组合控件,所以固定下来都用CompositeControl,以后专攻该方向

    问题2、空白的代码框架中还要引用什么?
    答:因为要继承CompositeControl,所以要引入命名空间using System.Web.UI.WebControls;

    问题3、在哪里加入我的子控件?
    答:重写CreateChildControls。它是从Control一路继承过来的,里面没有任何内容,其目的就是供我们override的。(横向分析)
    附:(纵向逆序分析)CreateChildControls会被EnsureChildControls调用。而EnsureChildControls则被众多类或控件调用,如Page、Login。(纵向正序分析)如Page,在FindControl时,第一句话就是调用EnsureChildControls,就是在找控件前要保证自己的子控件确实已生成,最后又是FindControl其它控件。再如Login、在设计模式下Render时,也有调用EnsureChildControls,而没有对EnsureChildControls进行重写,只是对CreateChildControls进行重写。
    总之,我们的控件只要在CreateChildControls中老老实实地加入自己的代码即可。

    问题4、重写CreateChildControls中,父类的base.CreateChildControls需要保留吗?
    答:从前面看,父类及祖先都没对CreateChildControls进行实质操作,因此可以不保留。
    从Login的CreateChildControls的代码中也可以验证这一点。

    问题5、如何增加子控件?
    答:利用对象的方式增加,书上示例这样,Reflector的代码也是这样。把自己的子控件加入到Controls集合中。步骤:先要定义全局控件变量,然后在CreateChildControls中清空Controls集合,再对控件进行属性设置,最后一个控件一个控件地加进去。就OK了。

    问题6、如何增加一个属性?
    答:按如下步骤:1.定义一个私有变量,用p开头,后面带变量类型;2.建立一个公用属性,它与方法的区别在于:方法有带括号,而属性没带括号,它与变量的区别在于:变量是用等于来赋值的,而属性是用大括号来设置的;3.里面写上get与set的代码。最后提示,要补充相应的文档,以前控件没有文档,再到后来补是一件很痛苦的事情。
    范例:
    /// <summary> 存储标签文字的私有变量,默认值为空字符串 </summary>
    private string psLabCaption = string.Empty;

    /// <summary>
    /// 返回/设置 标签所显示的文字
    /// 字符型,一般要带冒号(:)
    /// </summary>
    public virtual string LabCaption
    {
      get
      {
        return this.psLabCaption;
      }

      set
      {
        this.psLabCaption = value;
      }
    }

    问题7、如何增加一个客户端事件处理脚本?
    答:使用Attributes.Add的方法在CreateChildControls中进行,如:
        this.oTxt.Attributes.Add("onkeydown", "ZU.NextFocus();");
    此外,我们一定要通过整理与集成来保证将要执行的代码量极少。

  • 相关阅读:
    关于yyyy-MM-dd格式日期字符串,解析成LocalDateTime遇到的问题
    idea设置代码提示不区分大小写
    不错的Django技术网址
    Django-Rest-Framework 教程: 快速入门
    Djanto static静态文件配置
    Html5 touch event
    Zepto.js touch模块深入分析
    Python单元测试框架之pytest -- fixtures
    Python:高级主题之(属性取值和赋值过程、属性描述符、装饰器)
    Nginx基本配置、性能优化指南
  • 原文地址:https://www.cnblogs.com/yzx99/p/1380420.html
Copyright © 2020-2023  润新知