1 /// <summary> 2 /// 事件:EventHanler 3 /// 用戶在單擊win窗口中的如按鈕,復(fù)選框等,就會引發(fā)事件,我們要寫代碼去處理這些事件。實現(xiàn) 處理事件的 事件處理程序 4 /// 在.Net里,有委托實現(xiàn)事件,具有事件的對象為:發(fā)布者。訂閱事件(處理事件)的為訂閱者。 5 /// 當(dāng)對象提供事件時,它會定義一個委托,則希望處理該事件的對象必須為這個委托提供函數(shù),該委托稱為事件,而處理該委托的函數(shù)稱為事件處理程序 6 /// 如,當(dāng)你創(chuàng)建button并雙擊它時,就會自動添加一個事件處理程序。 7 /// </summary> 8 class Program 9 { 10 /// <summary> 11 /// 下面是一個Timer類處理事件 12 /// </summary> 13 /// <param name="args"></param> 14 static void Main(string[] args) 15 { 16 Timer t=new Timer(1000);//對象t 17 t.Elapsed+=new ElapsedEventHandler(t_ela);//對象t的一個事件,t_ela為事件t.Elapsed的處理程序 18 t.Start(); 19 Console.ReadLine(); 20 } 21 static void t_ela(object sender, ElapsedEventArgs e)//相關(guān)的簽名一定要一樣。 22 { 23 Console.SetCursorPosition(0,0); 24 Console.WriteLine(DateTime.Now); 25 } 26 } 1 /// <summary> 2 /// 下面是一個FileSystemWatcher類處理事件 3 /// </summary> 4 /// <param name="args"></param> 5 static void Main(string[] args) 6 { 7 FileSystemWatcher fSysW=new FileSystemWatcher() 8 { 9 Path = @"c:\", 10 Filter = "*.txt" 11 }; 12 //---wire up the event handlers---- 13 fSysW.Deleted += new FileSystemEventHandler(fSysW_Deleted); 14 fSysW.Renamed += new RenamedEventHandler(fSysW_Renamed);//這個事件有些特別 15 fSysW.Changed += new FileSystemEventHandler(fSysW_Changed); 16 fSysW.Created += new FileSystemEventHandler(fSysW_Created); 17 18 fSysW.EnableRaisingEvents = true; 19 Console.ReadLine(); 20 } 21 static void fSysW_Deleted(object sender, FileSystemEventArgs e) 22 { 23 Console.WriteLine("fSysW_Deleted" + e.FullPath); 24 } 25 static void fSysW_Renamed(object sender, RenamedEventArgs e) 26 { 27 Console.WriteLine("fSysW_Renamed" + e.FullPath); 28 } 29 static void fSysW_Changed(object sender, FileSystemEventArgs e) 30 { 31 Console.WriteLine("fSysW_Changed" + e.FullPath); 32 } 33 static void fSysW_Created(object sender, FileSystemEventArgs e) 34 { 35 Console.WriteLine("fSysW_Created" + e.FullPath); 36 } 1 /// <summary> 2 /// 下面是一個自定義類處理事件 3 /// 4 /// </summary> 5 /// <param name="args"></param> 6 private static void Main(string[] args) 7 { 8 AlarmClock c=new AlarmClock() //創(chuàng)建這個類的對象 9 { 10 AlarmTime = new DateTime(2013, 4, 22, 21, 04, 0, 0) //初使化它的時間 11 }; 12 c.Start(); //開始里面的Timer 13 //調(diào)用里面的事件,這個事件是在時間到了的時候調(diào)用,而具體請看類 14 c.TimesUp+=new EventHandler(c_TimesUp); 15 Console.ReadLine(); 16 } 17 static void c_TimesUp(object sender, EventArgs e) 18 { 19 Console.WriteLine("Times up!"); 20 } 21 22 23 } 24 25 class AlarmClock 26 { 27 private Timer t; 28 public DateTime AlarmTime { get; set; } 29 public void Start() 30 { 31 t.Start(); 32 } 33 public AlarmClock() 34 { 35 t=new Timer(100); 36 t.Elapsed+=new ElapsedEventHandler(t_Elapsed); 37 } 38 void t_Elapsed(object sender, ElapsedEventArgs e) 39 { 40 if (DateTime.Now >= this.AlarmTime) 41 { 42 onTimeUp(new EventArgs()); //當(dāng)時間到了的時候,調(diào)用類的事件 43 t.Stop(); 44 } 45 } 46 //EventHandler是預(yù)定義的委托,該語句定義TimesUp為類的事件 47 public event EventHandler TimesUp; 48 protected virtual void onTimeUp(EventArgs e)//注意,上面那個和下面這個是一體的 49 { 50 if (TimesUp != null) //當(dāng)時間到了的事件,就會調(diào)用這個事件,而具體是怎么實現(xiàn)的,由這個類的對象決定。 51 TimesUp(this, e); 52 } 1 /// <summary> 2 /// 事件與委托,這是一個非常重要的東西 3 /// 學(xué)好了還要學(xué)會怎么用才對! 4 /// </summary> 5 /// <param name="args"></param> 6 private static void Main(string[] args) 7 { 8 AlarmClock c=new AlarmClock() //創(chuàng)建這個類的對象 9 { 10 Message = "Meeting with customer", 11 AlarmTime = new DateTime(2013, 4, 22, 22, 01, 0, 0) //初使化它的時間 12 }; 13 c.Start(); //開始里面的Timer 14 //調(diào)用里面的事件,這個事件是在時間到了的時候調(diào)用,而具體請看類 15 //其中,TimesUp對應(yīng)事件名稱: 16 c.TimesUp+=new AlarmClockEventHandler(c_TimesUp); 17 Console.ReadLine(); 18 } 19 static void c_TimesUp(object sender, AlarmClockEventArgs e) 20 { 21 Console.WriteLine(DateTime.Now.ToShortTimeString()+" : "+e.Message);//可以包含參數(shù)了! 22 } 23 } 24 25 //定義一個全新的事件類 26 public class AlarmClockEventArgs:EventArgs 27 { 28 public AlarmClockEventArgs(string Message)//構(gòu)造 29 { 30 this.Message = Message; 31 } 32 public string Message { get; set; } 33 } 34 35 //定義一個委托,其中包含有上面的事件類型作參數(shù),難道事件的承載都是委托????! 36 public delegate void AlarmClockEventHandler(object sender, AlarmClockEventArgs e); 37 38 class AlarmClock 39 { 40 private Timer t; 41 public DateTime AlarmTime { get; set; } 42 public string Message { get; set; } 43 44 public AlarmClock() 45 { 46 t = new Timer(100); 47 t.Elapsed += new ElapsedEventHandler(t_Elapsed); 48 } 49 public void Start() 50 { 51 t.Start(); 52 } 53 54 void t_Elapsed(object sender, ElapsedEventArgs e) 55 { 56 if (DateTime.Now >= this.AlarmTime) 57 { 58 onTimeUp(new AlarmClockEventArgs(this.Message)); //當(dāng)時間到了的時候,調(diào)用類的事件 59 t.Stop(); 60 } 61 } 62 //AlarmClockEventHandler是預(yù)定義的委托,該語句定義TimesUp為類的事件 63 public event AlarmClockEventHandler TimesUp; 64 protected virtual void onTimeUp(AlarmClockEventArgs e)//注意,上面那個和下面這個是一體的 65 { 66 if (TimesUp != null) //當(dāng)時間到了的事件,就會調(diào)用這個事件,而具體是怎么實現(xiàn)的,由這個類的對象決定。 67 TimesUp(this, e); 68 } 69 } |
|