zoukankan      html  css  js  c++  java
  • Form中的keypress事件不能用

    Form中的keypress事件不能用

     

    编写人:CC阿爸

     

    2015-4-8

    近期在修改系统时,想给一画面增加一个组合键功能,但在form_keypress事件中加入代码,但无论如何也不能触发该动作。

    今天在这里,我想与大家一起分享代码不执行的原因,在此做个小结,以供参考。有兴趣的同学,可以一同探讨与学习一下,否则就略过吧。

     

    1、 首先找到我出问题的根本原因是:KeyPreview   没有设置true  ,如果没有设置为true,画面如果有button存,象return  enter之类集点肯定会在button上。

    所以第一时间先KeyPreview 设置为true。

    2、 下面再看看如何处理组合键的问题:

    1)         二个组合键比较容易处理

    1 private void frmLocalUpdate_KeyPress(object sender, KeyPressEventArgs e)  //CTRL+S
    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

      

     1 protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
     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

     



  • 相关阅读:
    LeetCode 79. 单词搜索
    LeetCode 1143. 最长公共子序列
    LeetCode 55. 跳跃游戏
    LeetCode 48. 旋转图像
    LeetCode 93. 复原 IP 地址
    LeetCode 456. 132模式
    LeetCode 341. 扁平化嵌套列表迭代器
    LeetCode 73. 矩阵置零
    LeetCode 47. 全排列 II
    LeetCode 46. 全排列
  • 原文地址:https://www.cnblogs.com/bribe/p/4401534.html
Copyright © 2011-2022 走看看