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