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

     



  • 相关阅读:
    HDU 5492 Find a path
    codeforce gym 100548H The Problem to Make You Happy
    Topcoder SRM 144 Lottery
    codeforce 165E Compatible Numbers
    codeforce gym 100307H Hack Protection
    区间DP总结
    UESTC 1321 柱爷的恋爱 (区间DP)
    HDU 4283 You Are the One (区间DP)
    HDU 2476 String painter (区间DP)
    UESTC 426 Food Delivery (区间DP)
  • 原文地址:https://www.cnblogs.com/bribe/p/4401534.html
Copyright © 2011-2022 走看看