Form中的keypress事件不能用
编写人:CC阿爸
2015-4-8
近期在修改系统时,想给一画面增加一个组合键功能,但在form_keypress事件中加入代码,但无论如何也不能触发该动作。
今天在这里,我想与大家一起分享代码不执行的原因,在此做个小结,以供参考。有兴趣的同学,可以一同探讨与学习一下,否则就略过吧。
1、 首先找到我出问题的根本原因是:KeyPreview 没有设置true ,如果没有设置为true,画面如果有button存,象return enter之类集点肯定会在button上。
所以第一时间先将KeyPreview 设置为true。
2、 下面再看看如何处理组合键的问题:
1) 二个组合键比较容易处理
2 {
3 if ((Control.ModifierKeys & Keys.Control) == Keys.Control && e.KeyChar== 19)
4 {
5 OpenUpload();
6 }
7 }
要指定在按键(如 Enter 或 Tab)时不显示的字符,以及表示操作而不表示字符的键,请使用下表中的代码。
键 | 代码 |
Backspace | {BACKSPACE}、{BS} 或 {BKSP} |
Break | {BREAK} |
Caps Lock | {CAPSLOCK} |
Del 或 Delete | {DELETE} 或 {DEL} |
向下键 | {DOWN} |
End | {END} |
Enter | {ENTER} 或 ~ |
Esc | {ESC} |
Help | {HELP} |
Home | {HOME} |
Ins 或 Insert | {INSERT} 或 {INS} |
向左键 | {LEFT} |
Num Lock | {NUMLOCK} |
Page Down | {PGDN} |
向上翻页 | {PGUP} |
Print Screen | {PRTSC}(保留供将来使用) |
向右键 | {RIGHT} |
Scroll Lock | {SCROLLLOCK} |
TAB | {TAB} |
向上键 | {UP} |
F1 | {F1} |
F2 | {F2} |
F3 | {F3} |
F4 | {F4} |
F5 | {F5} |
F6 | {F6} |
F7 | {F7} |
F8 | {F8} |
F9 | {F9} |
F10 | {F10} |
F11 | {F11} |
F12 | {F12} |
F13 | {F13} |
F14 | {F14} |
F15 | {F15} |
F16 | {F16} |
数字键盘加号 | {ADD} |
数字键盘减号 | {SUBTRACT} |
数字键盘乘号 | {MULTIPLY} |
数字键盘除号 | {DIVIDE} |
要指定与 Shift、Ctrl 和 Alt 键的任意组合一起使用的键,请在这些键代码之前加上以下一段或多段代码。
键 | 代码 |
Shift | + |
Ctrl | ^ |
Alt | % |
要指定在按一些键时应同时按住 Shift、Ctrl 和 Alt 键的任意组合,请将这些键的代码放在括号内。 例如,要指定按 E 和 C 时同时按住 Shift 键,请使用“+(EC)”。 要指定按 E 时应按住 Shift,之后按 C 时不按住 Shift,请使用“+EC”。
要指定重复键,请使用格式 {key number}。 键和数字之间必须放一空格。 例如,{LEFT 42} 表示按向左键 42 次;{h 10} 表示按 H 10 次。
(以上部分是摘自微软的msdn 详情可参考:https://msdn.microsoft.com/zh-cn/library/system.windows.forms.sendkeys.send.aspx)
2) 三个键:处理三个键的组合就比较麻烦,利用上面的方法我是没有成功过。
这时候我们可能就得利用重写ProcessCmdKey了
2 {
3 if ((keyData & Keys.Alt) == Keys.Alt) // 检测到alt
4 {
5 if ((keyData & Keys.Control) == Keys.Control)
6 {
7 System.Windows.Forms.SendKeys.Send( " ^% ");
8 return true;
9 }
10 }
11 return base.ProcessCmdKey( ref msg, keyData);
12 }
具体就需要各位好好的去自已去调试了。
3、有关更多的技术分享,大家可以加入我们的技术群。
欢迎加入技术分享群:238916811