天天看点

c# 事件 EventHandler

1     /// <summary>
 2     /// 事件:EventHanler
 3     /// 用户在单击win窗口中的如按钮,复选框等,就会引发事件,我们要写代码去处理这些事件。实现 处理事件的 事件处理程序
 4     /// 在.Net里,有委托实现事件,具有事件的对象为:发布者。订阅事件(处理事件)的为订阅者。
 5     /// 当对象提供事件时,它会定义一个委托,则希望处理该事件的对象必须为这个委托提供函数,该委托称为事件,而处理该委托的函数称为事件处理程序
 6     /// 如,当你创建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)//相关的签名一定要一样。
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()                           //创建这个类的对象
 9             {
10                 AlarmTime = new DateTime(2013, 4, 22, 21, 04, 0, 0) //初使化它的时间
11             };
12             c.Start();                                              //开始里面的Timer
13             //调用里面的事件,这个事件是在时间到了的时候调用,而具体请看类
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());          //当时间到了的时候,调用类的事件
43                 t.Stop();
44             }
45         }
46         //EventHandler是预定义的委托,该语句定义TimesUp为类的事件
47         public event EventHandler TimesUp;
48         protected virtual void onTimeUp(EventArgs e)//注意,上面那个和下面这个是一体的
49         {
50             if (TimesUp != null)                    //当时间到了的事件,就会调用这个事件,而具体是怎么实现的,由这个类的对象决定。
51                 TimesUp(this, e);
52         }      
1         /// <summary>
 2         /// 事件与委托,这是一个非常重要的东西
 3         /// 学好了还要学会怎么用才对!
 4         /// </summary>
 5         /// <param name="args"></param>
 6         private static void Main(string[] args)
 7         {
 8             AlarmClock c=new AlarmClock()                           //创建这个类的对象
 9             {
10                 Message = "Meeting with customer",
11                 AlarmTime = new DateTime(2013, 4, 22, 22, 01, 0, 0) //初使化它的时间
12             };
13             c.Start();                                              //开始里面的Timer
14             //调用里面的事件,这个事件是在时间到了的时候调用,而具体请看类
15             //其中,TimesUp对应事件名称:
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);//可以包含参数了!
22         }
23     }
24 
25     //定义一个全新的事件类
26     public class AlarmClockEventArgs:EventArgs
27     {
28         public AlarmClockEventArgs(string Message)//构造
29         {
30             this.Message = Message;
31         }
32         public string Message { get; set; }
33     }
34 
35     //定义一个委托,其中包含有上面的事件类型作参数,难道事件的承载都是委托??!!
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));          //当时间到了的时候,调用类的事件
59                 t.Stop();
60             }
61         }
62         //AlarmClockEventHandler是预定义的委托,该语句定义TimesUp为类的事件
63         public event AlarmClockEventHandler TimesUp;
64         protected virtual void onTimeUp(AlarmClockEventArgs e)//注意,上面那个和下面这个是一体的
65         {
66             if (TimesUp != null)                    //当时间到了的事件,就会调用这个事件,而具体是怎么实现的,由这个类的对象决定。
67                 TimesUp(this, e);
68         }
69     }