C#winForm里键盘事件的响应
1,方向键和回车不能够在KeyDown事件里响应.解决方案是重写ProcessCmdKey
2,其原理并不清晰.base.ProcessCmdKey调用父类的键盘事件.
KeyDown函数等于在父类里注册了一个事件响应代码.
//在KeyDown事件里无法捕获方向键,回车.能捕获空格之类
//但是是重写了之后,就不能捕获了.
private void FrmKeyDown_KeyDown(object sender, KeyEventArgs e)
{
//MessageBox.Show(e.KeyCode.ToString());//这里捕获不到方向键
switch (e.KeyCode)
{
case Keys.Right:
MessageBox.Show("Right123");
break;
case Keys.Left:
MessageBox.Show("Left123");
break;
case Keys.Up://方向键不反应
MessageBox.Show("up123");
break;
case Keys.Down:
MessageBox.Show("Down123");
break;
case Keys.Space:
MessageBox.Show("space123");//空格可以响应
break;
case Keys.Enter:
MessageBox.Show("enter123");
break;
}
}
//方向键事件的处理,只能重写ProcessCmdKey,重写的方法体可以自动生成,不用担心.
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
case Keys.Right:
MessageBox.Show("Right");
break;
case Keys.Left:
MessageBox.Show("Left");
break;
case Keys.Up://方向键不反应
MessageBox.Show("up");
break;
case Keys.Down:
MessageBox.Show("down");
break;
case Keys.Space:
MessageBox.Show("space");
break;
case Keys.Enter:
MessageBox.Show("enter");
break;
}
//return false;//如果要调用KeyDown,这里一定要返回false才行,否则只响应重写方法里的按键.
//这里调用一下父类方向,相当于调用普通的KeyDown事件.//所以按空格会弹出两个对话框
return base.ProcessCmdKey(ref msg, keyData);
}