ASP.NET的组件有两种,一种是继承自Control或者Webcontrol的CONTROL类组件,这类组件当你把它拖入到页面上时,它显示在页面上,另一种继承自Component类,这种不会显示在页面布局上,而是显示在COMPONENT TRAY上,这种,你可以叫它不可视组件,比如Sqlconnection组件
要实现一个CONTROL类的控件,只要有下面的核心代码就行了

using System;
using System.Web.UI;
using System.Web;


namespace MyControl
{
public class WebTimer:System.Web.UI.Control
{
public WebTimer()
{
}
}
}

问题是,这个CONTROL没有任何用途,它既不会向页面产生输出,也不会处理事件,几乎没有任何用途
另外,为什么继承CONTROL类而不是WEBCONTROL类,在<深入剖析ASP.NET组件设计>中讲的很清楚,WEBTIMER是不需要产生可视的HTML代码的,它所需要的是绘制一段JS代码到页面中去,所以,无需继承复杂的WEBCONTROL,而是继承CONTROL
既然是计时器,WEBTIMER当然需要设置每隔多少时间进行一次计时了,另外,我们还加入一个开头允许使用者打开或者关闭此计时器,所以,我们为WEBTIMER加入以下成员变量和属性

成员变量定义#region 成员变量定义
            private int _interval=5000;//计时器种子数
            private bool _enable=true;//是否允许此计时器
            private static  object TimerKey=new object();//TimerKey是做什么用的呢,它是用来做Events的KEY对象的,而且它是静态的,所以,对于类的所有实例,将只耗费一个变量的代价
        #endregion

        属性定义#region 属性定义
        [Browsable(true),Bindable(true),DefaultValue(5000),Description("计时器使用的种子数")]
        public int Interval
        {
            set{_interval=value;}
            get{return(_interval);}
        }

        [Browsable(true),Bindable(true),DefaultValue(true),Description("是否允许计时器")]
        public bool Enable
        {
            get{return _enable;}
            set{_enable=true;}
        }

        [Browsable(true),Bindable(true),DefaultValue(true),Description("是否输出控件")]
        public override bool Visible
        {
            get
            {return base.Visible;}
            set
            {base.Visible = value;}
        }

        #endregion

上面定义了_interval成员变量,暴露了一个对应的Interval属性,而_enable成员变量的暴露属性为Enable,用属性的好处是组件在设计时,属性可以显示于属性栏用来通过IDE进行设计,另外我们还对属性添加了一些修饰,[]内的是对成员进行修饰的Attribute
其中Browsable是定义此成员是否可以在IDE设计器中用BIND对话框来添加绑定,DefaultValue定义其默认值,当指定值与默认值相吻合时,此属性不被写入以减少代码,DESCRIPTION是显示于IDE的说明
这里BROWSABLE也好,BINDABLE也好,其全称应该是BrowsableAttribute,BindableAttribute,Browsable是其别名,它们是派生于Attribute类,作用是用来通告使用者一些信息
构成WEBTIMER的成员要素齐备了,接着呢?WEBTIMER的作用是要让页面每隔一段时间就POSTBACK,然后再引发事件,从而在事件处理函数中做一些处理,问题是,怎样才能让WEBTIMER能够处理事件呢,答案是继承IPostBackEventHandler接口,SYSTEM命名空间中有N多的接口,其中IPostBackEventHandler是给那些需要参与POSTBACK机制,并且在回传后处理事件的控件来用的,为什么呢,因为回传后,PAGE会调用RaisePostBackEvent来处理回传事件,在处理事件时,Page会调用页面中每一个实现了IpostbackEventHandler接口的控件的RaisePostBackEvent方法来处理事件,因此,要参与POSTBACK的事件处理,不光要实现IPOSTBACKEVENTHANDLER,而且要实现RaisePostBackEvent方法,VS.NET很方便,所以,当你加入IPostBackEventHandler接口的时候,它会提示你按TAB键来重载IPostBackEventHandler.RaisePostBackEvent方法,VS.NET会为你自动加入代码
下面是实现IPostBackEventHandler.RaisePostBackEvent的代码

IPostBackEventHandler 成员#region IPostBackEventHandler 成员
        /**//// <summary>
        /// 每个要使用POSTBACK机制并且想在POSTBACK后进行适当处理的控件
        /// 必须实现IPostBackEventHandler的RaisePostBackEvent方法
        /// 并在此方法中调用或间接调用事件处理程序
        /// </summary>
        /// <param name="eventArgument"></param>
        public void RaisePostBackEvent(string eventArgument)
        {
            // TODO:  添加 WebTimer.RaisePostBackEvent 实现
            ProcessTimer("");
        }
        #endregion

ProcessTimer是一个私有的成员方法,作用是调用合适的事件处理方法

转载于:https://www.cnblogs.com/Heroman/archive/2004/11/30/70911.html

WEBTIMER控件研究的心得:WebTimer的启示相关推荐

  1. WEBTIMER控件研究的心得:丢开书本做一个WebTimer

    先说说几个教训: 1,小心命名,别跟系统已经存在的命名起冲突,比如,我一时疏忽将控件的命名空间设成Control,编译通过后,运行总是不通过,查了半天,才发现这个小问题,再比如,NAMEspace别和 ...

  2. OWC绘图控件研究(轉)

    OWC绘图控件研究 OWC,即Office Web Components,是微软随Office提供的绘图控件,使用它能够绘制绝大部分的图形,但不幸的是OWC的帮助文件并不好用,网上关于OWC的文章也都 ...

  3. Windows Media Player控件研究

    初级问题: 我的那个定时提醒程序中要用到它,初步使用问题已解决.基本使用步骤如下: 一.往控件箱中添加此控件:wmp.dll 二.往窗体上拖控件 三.wmp.URL=XXXX;wmp.play()即可 ...

  4. VS2010 C# ReportViewer控件新手上路心得

    环境:Visual Studio 2010, C#; 前言:本来是用VS2010连接Oracle数据库做一个报表功能,数据集设置部分出了些问题还未解决,因此先用本地动态数据为测试用例先熟悉VS自带的R ...

  5. [导入]sqlserver2005 数据挖掘控件研究

    注意:对于本文提到的dll,因为微软没有公布,建议不要用于真实项目中去.否则以后使用中出现问题,将变的非常被动,本文仅作学习之用. 对于搞Sqlserver2005BI的朋友来说,相信肯定看到过sql ...

  6. tab控件的使用心得

    现在要做一个登陆系统,功能包括注册消息,修改消息,登陆等等.考虑使用tab控件来将所有功能都集中在一个对话框中实现. step1  在主对话框中拖入一个tab控件,命名随意,在ClassWizard为 ...

  7. farpoint 小数保留4位_FarPoint FpSpread控件的使用心得2

    FpSpread 表格控件 ,FpSpread 事件介绍 ''' 单击单元格 Private Sub FpSpread1_CellClick(ByVal sender As Object, ByVal ...

  8. 滑轮控件研究四、VelocityTracker的简单研究

    帮助你追踪一个touch事件(flinging事件和其他手势事件)的速率.当你要跟踪一个touch事件的时候,使用obtain()方法得到这个类的实例,然后 用addMovement(MotionEv ...

  9. delphi 7中EhLib3.x控件的安装心得

    delphi7中安装Ehlib3一开始不知道怎么安装,就从网上下载了的Ehlib3中找到delphi7目录中的"EhLib70.dpk"文件,从delphi7->File-& ...

  10. 【转】wpf从我炫系列1----布局控件的使用(上)

    今天我来给大家讲解在学习WPF过程中使用布局控件的一些心得,主要给大家介绍一下一个控件的用法.希望对大家学习Wpf有所帮助. 1.       StackPanel栈面板 2.       WrapP ...

最新文章

  1. MATLAB读取HDF格式的SST数据
  2. 自己动手实现的 Spring IOC 和 AOP - 下篇
  3. Android Studio编译提示如下attribute layout_constraintBottom_toBottomOf (aka com.luck.pictureselector:layou
  4. ASA 5.0/8.0/9.0 杂记
  5. 苹果叒要开发布会了!多款新机曝光,Intel不淡定了
  6. janusgraph整合mysql_图解图库JanusGraph系列-一文知晓“图数据“底层存储结构
  7. 20190228 搭建Hadoop基础环境
  8. 城乡规划转到计算机专业行吗,哪些大学城乡规划专业有博士点
  9. 3.8 以符号常量/字面常量取代魔法数
  10. Maya粒子消散特效制作(二)
  11. 股票估值法研究报告_论述股票的估值方法
  12. 网站服务器如何直接播放视频,视频放服务器链接直接播放
  13. 吐血推荐:数据库你想知道的都在这
  14. for what? so what?
  15. 褚橙是如何用互联网营销颠覆橙子的?
  16. 让你相见恨晚的PS技巧分享
  17. 懂的android基础如何面试月薪过万
  18. php 检测分辨率,浏览器分辨率检测,屏幕分辨率检测
  19. 方法重载例题 编写程序计算两个同类型的数之和 Java
  20. 设置matlab图像线框,matlab在图像中画长方形(框)

热门文章

  1. 皇子皮肤测试软件,买了皇子的SSG皮肤,说一下特效和手感,顺便说下皇子各个皮肤排名。...
  2. 一篇博客收能收录计算机网络?
  3. 如何VS Code打造成Java开发IDE?
  4. 手撸架构,Java基础 面试100问
  5. 6-2 求解一元二次方程实根的函数 (10 分)
  6. 实战sqlmap绕过WAF(中转注入)
  7. python修改图片大小为30kb_python 批量修改图片大小
  8. python爬虫新浪微博评论、评论人信息
  9. hdu 4272 LianLianKan
  10. 30秒一键清理你电脑中的垃圾