落魄joker  
why so serious

一直对事件的处理机制不是特别明确,今天看了‘风卷残云后’C#事件解析这篇文章后,模仿了一篇Code之后思路清晰许多,下面是代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 
 5 namespace T_Event
 6 {
 7     class Program
 8     {
 9         static void Main(string[] args)
10         {
11             KeyInputMonitor monitor = new KeyInputMonitor();
12 
13             EventReceive receive = new EventReceive(monitor);
14 
15             monitor.run();
16         }
17     }
18 

19     //此类用来保存按键信息

        //internal修饰符:
使用该修饰符声明的类型或成员只能在同一程集内访问接口的成员

20     internal class KeyEventArg:EventArgs
21     {
22         private char keychar;
23 
24         public KeyEventArg(char keychar)
25         {
26             this.keychar = keychar;
27         }
28 
29         public char KeyChar
30         {
31             get
32             {
33                 return keychar;
34             }
35         }
36     }
37 
38     internal class KeyInputMonitor
39     { 
40         public delegate void keydownhandle(object Sender,KeyEventArg e);
41 
42         public event keydownhandle Onkeydownhandle;
43 
44         public void run()
45         {
46             bool Flag = false;
47             do
48             {
49                 Console.WriteLine("Please Input A Char");
50                 string response = Console.ReadLine();
51                 char rChar = (response == ""? ' ' : char.ToUpper(response[0]);
52                 switch (rChar)
53                 {
54                     case 'X':
55                         Flag = true;
56                         break;
57                     default:
58                         //实例化一个 KeyEventArg,获取按键信息
59                         KeyEventArg keyeventarg = new KeyEventArg(rChar);
60                         //触发Onkeydownhandle事件,并交于委托keydownhandle所指定的方法处理
61                         Onkeydownhandle(this, keyeventarg);
62                         break;
63                 }
64             } while (!Flag);
65         }
66     }
67 
68     internal class EventReceive
69     {
70         public EventReceive(KeyInputMonitor monitor)
71         {
72             //程序启动后订阅事件,将委托实例添加到产生事件对象的事件列表中去
73             monitor.Onkeydownhandle += new KeyInputMonitor.keydownhandle(this.Echo);
74         }
75 
76             private void Echo(object sender,KeyEventArg e)
77             {
78                 Console.WriteLine( "Capture key: {0}", e.KeyChar );
79                 //看看sender(this)传递的是什么值,原来就是KeyInputMonitor类
80                 string strsender = sender.ToString();
81                 Console.WriteLine(strsender);
82             }
83         }

84     }

 

注释是按自己的理解写的,如果理解有误欢迎指正

posted on 2008-12-21 22:41  bravecheese  阅读(343)  评论(0编辑  收藏  举报