using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace OnKeyDown
{
class Program
{
static void Main(string[] args)
{
//实例化一个事件发送器
KeyInputMonitor monitor = new KeyInputMonitor();
//实例化一个事件接收器
EventReceiver eventReceiver = new EventReceiver(monitor);
//运行
monitor.Run();
}
}
internal class KeyEventArgs : EventArgs
{
private char keyChar;
public KeyEventArgs(char keyChar) : base()
{
this.keyChar = keyChar;
}
public char KeyChar
{
get
{
return keyChar;
}
}
}
internal class KeyInputMonitor
{
//创建一个委托,返回类型为void,两个参数
public delegate void KeyDown(object sender, KeyEventArgs e);
//将创建的委托和特定事件关联,在这里特定的事件为OnKeyDown
public event KeyDown OnKeyDown;
public void Run()
{
bool finished = false;
do
{
Console.WriteLine("Input a char");
string response = Console.ReadLine();
char responseChar = (response == "") ? ' ' : char.ToUpper(response[0]);
switch(responseChar)
{
case 'X':
finished = true;
break;
default:
//得到按键信息的参数
KeyEventArgs keyEventArgs = new KeyEventArgs(responseChar);
//触发事件
OnKeyDown(this, keyEventArgs);
break;
}
}while(!finished);
}
}
internal class EventReceiver
{
public EventReceiver(KeyInputMonitor monitor)
{
//产生一个委托实例并添加到KeyInputMonitor产生的事件列表中
monitor.OnKeyDown += new KeyInputMonitor.KeyDown(this.Echo);
}
private void Echo(object sender, KeyEventArgs e)
{
//真正的事件处理函数
Console.WriteLine("Capture key: {0}", e.KeyChar);
}
}
}