日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/9/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WEBTIMER控件研究的心得:丢开书本做一个WebTimer 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先說說幾個教訓:
1,小心命名,別跟系統已經存在的命名起沖突,比如,我一時疏忽將控件的命名空間設成Control,編譯通過后,運行總是不通過,查了半天,才發現這個小問題,再比如,NAMEspace別和類名相同,否則,寫起來很是不方便
下面是WEBTIMER的全部代碼加了注解的

using?System;
using?System.Web.UI;
using?System.Text;
using?System.Web;
using?System.Data;
using?System.ComponentModel;

namespace?MyControl
{
????
/**////?<summary>
????
///?WebTimer?的摘要說明。
????
///?</summary>
????
///Designer屬性指定一個類作為設計時類,該類必須派生于ControlDesigner類,并且實現GetDesignHtml方法
????
///Designer性性是System.ComponentModel空間的類
????
///WebTimer繼承了IPostBackEventHandler是因為任何要利用POSTBACK機制來進行事件處理的控件都必須
????
///繼承該接口并實現RaisePostbackEvent方法

????[Designer(typeof(MyControl.WebTimerDesigner))]
????
public?class?WebTimer:System.Web.UI.Control,System.Web.UI.IPostBackEventHandler
????
{
????????
成員變量定義#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


????????
事件定義#region?事件定義
????????
public?event?EventHandler?Timer
????????
{
????????????add?
{Events.AddHandler(TimerKey,value);}
????????????remove
{Events.RemoveHandler(TimerKey,value);}
????????}

????????
#endregion


????????
方法定義#region?方法定義
????????
/**////?<summary>
????????
///?這個私有方法是用來在引發POSTBACK事件后,調用事件處理的關鍵,它再調用相應的事件處理程序
????????
///?</summary>

????????private??void?ProcessTimer(string?eventArgument)
????????
{
????????????EventHandler?TimerHandler
=(EventHandler)Events[TimerKey];
????????????
if(TimerHandler!=null)
????????????????TimerHandler(
this,EventArgs.Empty);
????????}


????????
private?string?BuildJavascript()
????????
{
????????????StringBuilder?JsBuilder
=new?StringBuilder();
????????????JsBuilder.AppendFormat(
"<script?language='javascript'>setTimeout(\"{0}\",{1});</script>",new?object[]{Page.GetPostBackEventReference(this),Interval});
????????????
return(JsBuilder.ToString());
????????}


????????
#endregion


????????
IPostBackEventHandler?成員#region?IPostBackEventHandler?成員
????????
/**////?<summary>
????????
///?每個要使用POSTBACK機制并且想在POSTBACK后進行適當處理的控件
????????
///?必須實現IPostBackEventHandler的RaisePostBackEvent方法
????????
///?并在此方法中調用或間接調用事件處理程序
????????
///?</summary>
????????
///?<param?name="eventArgument"></param>

????????public?void?RaisePostBackEvent(string?eventArgument)
????????
{
????????????
//?TODO:??添加?WebTimer.RaisePostBackEvent?實現
????????????ProcessTimer("");
????????}

????????
#endregion


????????
OnRender方法用來輸出HTML#region?OnRender方法用來輸出HTML
????????
protected?override?void?Render(HtmlTextWriter?writer)
????????
{
????????????
if(Page!=null)
????????????????Page.VerifyRenderingInServerForm(
this);
????????????
if(_enable)
????????????????writer.Write(BuildJavascript());
????????}


????????
#endregion


????????
OnPreRender方法用來產生HTML#region?OnPreRender方法用來產生HTML
????????
protected?override?void?OnPreRender(EventArgs?e)
????????
{
????????????
base.OnPreRender?(e);
????????????Page.GetPostBackEventReference(
this,"");
????????????
//發現這一句可以不加,如果見了的話呢,DOPOSTBACK將會被繪制在前面,否則,繪制在后面
????????}

????????
#endregion

????????
????}

}


相應的Designer
using?System;
using?System.Web.UI;
using?System.Web.UI.Design;
using?System.Text;
namespace?MyControl
{
????
/**////?<summary>
????
///?WebTimerDesigner?的摘要說明。
????
///?</summary>

????public?class?WebTimerDesigner:System.Web.UI.Design.ControlDesigner
????
{
????????
public?override?string?GetDesignTimeHtml()
????????
{
????????????StringBuilder?HtmlBuilder
=new?StringBuilder();
????????????Control?TimerControl
=(Control)this.Component;
????????????
if(TimerControl?is?MyControl.WebTimer)
????????????
{
????????????????HtmlBuilder.AppendFormat(
"<span?id=\"{0}\"?style=\"border:1px?solid?#666666;font-size:9pt;font-weight:bold\"?>{1}</span>",new?object[]{TimerControl.ClientID,"WebTimer"});
????????????}

????????????
return(HtmlBuilder.ToString());
????????}
????????
????}

}


調用頁面的HTML
<%@?Page?language="c#"?Codebehind="WebForm1.aspx.cs"?AutoEventWireup="false"?Inherits="TimerDemo.WebForm1"?%>
<%@?Register?TagPrefix="cc1"?Namespace="MyControl"?Assembly="MyControl.WebTimer"?%>
<!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.0?Transitional//EN"?>
<HTML>
????
<HEAD>
????????
<title>WebForm1</title>
????????
<meta?name="GENERATOR"?Content="Microsoft?Visual?Studio?.NET?7.1">
????????
<meta?name="CODE_LANGUAGE"?Content="C#">
????????
<meta?name="vs_defaultClientScript"?content="JavaScript">
????????
<meta?name="vs_targetSchema"?content="http://schemas.microsoft.com/intellisense/ie5">
????
</HEAD>
????
<body?MS_POSITIONING="GridLayout">
????????
<form?id="Form1"?method="post"?runat="server">
????????????????
<cc1:WebTimer?id="WebTimer1"?runat="server"></cc1:WebTimer>
????????
</form>
????
</body>
</HTML>
相應的代碼
using?System;
using?System.Collections;
using?System.ComponentModel;
using?System.Data;
using?System.Drawing;
using?System.Web;
using?System.Web.SessionState;
using?System.Web.UI;
using?System.Web.UI.WebControls;
using?System.Web.UI.HtmlControls;

namespace?TimerDemo
{
????
/**////?<summary>
????
///?WebForm1?的摘要說明。
????
///?</summary>

????public?class?WebForm1?:?System.Web.UI.Page
????
{
????????
protected?MyControl.WebTimer?WebTimer1;
????
????????
private?void?Page_Load(object?sender,?System.EventArgs?e)
????????
{
????????????
//?在此處放置用戶代碼以初始化頁面
????????}


????????
Web?窗體設計器生成的代碼#region?Web?窗體設計器生成的代碼
????????
override?protected?void?OnInit(EventArgs?e)
????????
{
????????????
//
????????????
//?CODEGEN:?該調用是?ASP.NET?Web?窗體設計器所必需的。
????????????
//
????????????InitializeComponent();
????????????
base.OnInit(e);
????????}

????????
????????
/**////?<summary>
????????
///?設計器支持所需的方法?-?不要使用代碼編輯器修改
????????
///?此方法的內容。
????????
///?</summary>

????????private?void?InitializeComponent()
????????
{????
????????????
this.WebTimer1.Timer?+=?new?System.EventHandler(this.WebTimer1_Timer);
????????????
this.Load?+=?new?System.EventHandler(this.Page_Load);

????????}

????????
#endregion


????????
private?void?WebTimer1_Timer(object?sender,?System.EventArgs?e)
????????
{
????????????Response.Write(DateTime.Now);
????????}

????}

}

轉載于:https://www.cnblogs.com/Heroman/archive/2004/11/29/70614.html

總結

以上是生活随笔為你收集整理的WEBTIMER控件研究的心得:丢开书本做一个WebTimer的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。