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

     



  • 相关阅读:
    Win7安装软件,装到microsoft.vc90.crt时卡住的解决办法
    转:如何利用已有的切片文件生成TPK
    转:ACCESS数据库转ORACLE数据库分享
    转:ITopologicalOperator Buffer调用异常的解决方法(来源网络)
    转:【制图】如何表现道路上下层级间的真实关系
    oracle 递归查询(来源于网络)
    Sde各类命令详解(sdemon 、sdelayer、sdeservice、sdetable、sdeconfig、SdeExport_SdeImport)
    GIS中的坐标系定义与转换
    转:Oracle优化总结
    转:ArcGIS提取面状道路中心线(转载)
  • 原文地址:https://www.cnblogs.com/bribe/p/4401534.html
Copyright © 2011-2022 走看看