WebControl示例
using System;
using System.Web.UI;
using System.Text;
namespace Goodspeed.Web

{
/**//// <summary>
/// Summary description for WebTimer
/// </summary>
public class WebTimer:Control, IPostBackEventHandler
{
- Properties -#region - Properties -
private int _interval = 5000;
public int Interval
{
get
{ return _interval; }
set
{ _interval = value; }
}
private bool _enabled;
public bool Enabled
{
get
{ return _enabled; }
set
{ _enabled = value; }
}
private static readonly object EventTimer = new object();
public bool Visible
{
get
{ return base.Visible; }
set
{ base.Visible = value; }
}
#endregion

- Constructor -#region - Constructor -
public WebTimer()
{
//
// TODO: Add constructor logic here
//
}
#endregion

- Event -#region - Event -
public event EventHandler Timer
{
add
{ Events.AddHandler(EventTimer, value); }
remove
{ Events.RemoveHandler(EventTimer, value); }
}
#endregion

/**//// <summary>
/// event handler functions
/// </summary>
/// <param name="e"></param>
protected virtual void OnTime(EventArgs e)
{
EventHandler TimerHandler = (EventHandler)Events[EventTimer];
if (TimerHandler != null)
{
TimerHandler(this, e);
}
}

- IPostBackEventHandler -#region - IPostBackEventHandler -
/**//// <summary>
/// 实现IPostBackEventHandler接口
/// </summary>
/// <param name="eventArgs"></param>
void IPostBackEventHandler.RaisePostBackEvent(string eventArgs)
{
OnTime(EventArgs.Empty);
}
#endregion
private string BulidJavascript()
{
StringBuilder sb = new StringBuilder();
sb.Append("<script>");
sb.AppendFormat("setTimeout(\"
{0}\",{1})", new object[]
{ this.Page.GetPostBackEventReference(this), _interval.ToString() });
sb.Append("</script>");
return sb.ToString();
}

- Override -#region - Override -
/**//// <summary>
///
/// </summary>
/// <param name="e"></param>
/// <remarks>
/// 此时调用page函数
/// </remarks>
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
//获取对客户端脚本函数的引用,调用该函数将使服务器发送回该页。
//该方法还将一个参数传递到在服务器上执行回发处理的服务器控件。
Page.GetPostBackEventReference(this, "");
}

/**//// <summary>
///
/// </summary>
/// <param name="writer"></param>
/// <remarks>
/// page已进入绘制状态,此时调用page对象的任何函数都太迟了
/// </remarks>
protected override void Render(HtmlTextWriter writer)
{
if (Page != null)
{
//确认在运行时为指定的 ASP.NET 服务器控件呈现 HtmlForm 控件
Page.VerifyRenderingInServerForm(this);
}
if (_enabled)
{
writer.Write(BulidJavascript());
}
}
#endregion
}
}
