WEBTIMER控件研究的心得:WebTimer的启示
ASP.NET的组件有两种,一种是继承自Control或者Webcontrol的CONTROL类组件,这类组件当你把它拖入到页面上时,它显示在页面上,另一种继承自Component类,这种不会显示在页面布局上,而是显示在COMPONENT TRAY上,这种,你可以叫它不可视组件,比如Sqlconnection组件
要实现一个CONTROL类的控件,只要有下面的核心代码就行了
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加入以下成员变量和属性
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的代码
/**//// <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的启示相关推荐
- WEBTIMER控件研究的心得:丢开书本做一个WebTimer
先说说几个教训: 1,小心命名,别跟系统已经存在的命名起冲突,比如,我一时疏忽将控件的命名空间设成Control,编译通过后,运行总是不通过,查了半天,才发现这个小问题,再比如,NAMEspace别和 ...
- OWC绘图控件研究(轉)
OWC绘图控件研究 OWC,即Office Web Components,是微软随Office提供的绘图控件,使用它能够绘制绝大部分的图形,但不幸的是OWC的帮助文件并不好用,网上关于OWC的文章也都 ...
- Windows Media Player控件研究
初级问题: 我的那个定时提醒程序中要用到它,初步使用问题已解决.基本使用步骤如下: 一.往控件箱中添加此控件:wmp.dll 二.往窗体上拖控件 三.wmp.URL=XXXX;wmp.play()即可 ...
- VS2010 C# ReportViewer控件新手上路心得
环境:Visual Studio 2010, C#; 前言:本来是用VS2010连接Oracle数据库做一个报表功能,数据集设置部分出了些问题还未解决,因此先用本地动态数据为测试用例先熟悉VS自带的R ...
- [导入]sqlserver2005 数据挖掘控件研究
注意:对于本文提到的dll,因为微软没有公布,建议不要用于真实项目中去.否则以后使用中出现问题,将变的非常被动,本文仅作学习之用. 对于搞Sqlserver2005BI的朋友来说,相信肯定看到过sql ...
- tab控件的使用心得
现在要做一个登陆系统,功能包括注册消息,修改消息,登陆等等.考虑使用tab控件来将所有功能都集中在一个对话框中实现. step1 在主对话框中拖入一个tab控件,命名随意,在ClassWizard为 ...
- farpoint 小数保留4位_FarPoint FpSpread控件的使用心得2
FpSpread 表格控件 ,FpSpread 事件介绍 ''' 单击单元格 Private Sub FpSpread1_CellClick(ByVal sender As Object, ByVal ...
- 滑轮控件研究四、VelocityTracker的简单研究
帮助你追踪一个touch事件(flinging事件和其他手势事件)的速率.当你要跟踪一个touch事件的时候,使用obtain()方法得到这个类的实例,然后 用addMovement(MotionEv ...
- delphi 7中EhLib3.x控件的安装心得
delphi7中安装Ehlib3一开始不知道怎么安装,就从网上下载了的Ehlib3中找到delphi7目录中的"EhLib70.dpk"文件,从delphi7->File-& ...
- 【转】wpf从我炫系列1----布局控件的使用(上)
今天我来给大家讲解在学习WPF过程中使用布局控件的一些心得,主要给大家介绍一下一个控件的用法.希望对大家学习Wpf有所帮助. 1. StackPanel栈面板 2. WrapP ...
最新文章
- MATLAB读取HDF格式的SST数据
- 自己动手实现的 Spring IOC 和 AOP - 下篇
- Android Studio编译提示如下attribute layout_constraintBottom_toBottomOf (aka com.luck.pictureselector:layou
- ASA 5.0/8.0/9.0 杂记
- 苹果叒要开发布会了!多款新机曝光,Intel不淡定了
- janusgraph整合mysql_图解图库JanusGraph系列-一文知晓“图数据“底层存储结构
- 20190228 搭建Hadoop基础环境
- 城乡规划转到计算机专业行吗,哪些大学城乡规划专业有博士点
- 3.8 以符号常量/字面常量取代魔法数
- Maya粒子消散特效制作(二)
- 股票估值法研究报告_论述股票的估值方法
- 网站服务器如何直接播放视频,视频放服务器链接直接播放
- 吐血推荐:数据库你想知道的都在这
- for what? so what?
- 褚橙是如何用互联网营销颠覆橙子的?
- 让你相见恨晚的PS技巧分享
- 懂的android基础如何面试月薪过万
- php 检测分辨率,浏览器分辨率检测,屏幕分辨率检测
- 方法重载例题 编写程序计算两个同类型的数之和 Java
- 设置matlab图像线框,matlab在图像中画长方形(框)