日期:2009-12-03 浏览次数:20599 次
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
[assembly:TagPrefix("Beyondbit.App.Web.UI.WebControls", "BBit")]
namespace Beyondbit.App.Web.UI.WebControls
{
 #region ElapsedEventArgs  class
 public class ElapsedEventArgs  : EventArgs 
 {
  public int SignalTime;
 }
 #endregion 
  
 /// <summary>
 /// 客户端定时器
 /// </summary>
 [DefaultProperty("Enabled"),
  ToolboxData("<{0}:ClientTimer runat=server></{0}:ClientTimer>")]
 public class ClientTimer : System.Web.UI.Control , System.Web.UI.IPostBackEventHandler // , System.Web.UI.IPostBackDataHandler
 {
  public delegate void ElapsedEventHandler( object sender, ElapsedEventArgs e );
  public event ElapsedEventHandler Elapsed;
  protected virtual void OnElapsed( ElapsedEventArgs e)
  {
   if ( Elapsed != null )
    Elapsed(this, e);
  }
private int signalTime = 0;
  private int interval = 0 ;
  [Description("设置或获取定时时间(毫秒)")]
  public int Interval
  {
   set
   {
    if( value <= 0 )
     throw new ArgumentException( "Interval时间间隔不能小于或等于0" );
    interval = value ;
   }
   get
   {
    return interval ;
   }
  }
  private bool enabled = false ;
  [Description("设置或获取定时器是否启用")]
  public bool Enabled
  {
   set{ enabled = value ; }
   get{ return enabled ;  }
  }
//public bool AutoReset = false ;
  [Description("停止定时器")]
  public void Stop()
  {
   enabled = false ;
  }
  protected override void OnPreRender(EventArgs e)
  {
   base.OnPreRender (e);
if( this.enabled == false ) return;
if( interval == 0 ) throw new ArgumentException( "定时器已启动,但Interval时间间隔没有设置" );
   //js 
   string jsId = this.UniqueID + "_js";
   string clientFunction = this.UniqueID + "_OnElapsed";
signalTime = signalTime + this.interval ;
   string js = "<script language='javascript'>" + 
    "window.setTimeout( "+clientFunction+" , "+ this.signalTime +" );" +
    "function " + clientFunction + "(){" +
     Page.GetPostBackEventReference( this , "" + this.signalTime ) + 
    ";}" +
    "</script> ";
Page.RegisterStartupScript( jsId , js );
}
  /// <summary>
  /// 将此控件呈现给指定的输出参数。
  /// </summary>
  /// <param name="output"> 要写出到的 HTML 编写器 </param>
  protected override void Render(HtmlTextWriter output)
  {
   //output.Write(Text);
  }
#region IPostBackEventHandler 成员
  public void RaisePostBackEvent( string eventArgument )
  {
   if( eventArgument == "" ) throw new Exception( "eventArgument参数为空!" );
   signalTime = int.Parse( eventArgument ) ;
   ElapsedEventArgs e = new ElapsedEventArgs();
&nbs