C# WinForm 键盘快捷键的使用
WinForm中定义快捷键有多种方式,这里简单说明平时用得多的两种。
1、响应 Form窗体的 KeyDown 事件
注意:需要设置Form窗体的 KeyPreview 属性为 true (默认false)
示例:
private void MainForm_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.F1:
//...
break;
case Keys.Escape:
//...
break;
case Keys.O:
if (e.Control)
{
// Ctrl + O
}
break;
case Keys.Oemcomma: //逗号键
// ...
break;
case Keys.OemPeriod: //句号键
// ...
break;
case Keys.Oem1: // 分号
// ...
break;
case Keys.Oem7: // 引号
// ...
break;
case Keys.Up: // 无效
// ...
return true;
case Keys.Down: //无效
// ...
return true;
}
问题
使用以上方法,可以对大多数键有效,当对于部分被系统使用的键,比如 向上箭头,系统默认是移动空间焦点的快捷键。要实现这些键的响应自定义,就需要使用下面这种方法。
2、重载 ProcessCmdKey 方法
直接看代码:
“` csharp
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
case Keys.Up:
// ...
return true;
case Keys.Down:
// ...
return true;
}
return false;
}
关键:
重载 ProcessCmdKey 需要注意的是返回值,返回值为 true,则表示系统不再响应该按键,false 表示在完成你自定义的响应操作后,系统会按照预定义的方式继续响应这个键。
比如:如果不想让系统响应 Up 键,在捕捉到 Keys.Up,响应完自定义的事件之后,可以返回 true,屏蔽系统对这个键的响应。
一般最后的一句话是返回 false,除非想对系统屏蔽所有的键。
附录:
虚拟键码对照表:
http://www.cnblogs.com/del/archive/2007/12/07/987364.html