Keys 类包含用于处理键盘输入的常数。键枚举的成员由一个键代码和一组修饰符构成(键代码和修饰符组成一个整数值)。在 Win32 应用程序编程接口 (API) 中,一个键值分为两部分:包含键代码(该代码与 Windows 虚拟键代码相同)的高序位和表示键修饰符(例如,Shift、Ctrl 和 Alt 键)的低序位。也就是说,如果你使用组合键,也可以通过Keys表达出来。

解决方案 »

  1.   

    为什么要这么设计Keys枚举呢?
    ------------
    因为有一种按键叫组合键...比如最常用的 Ctrl+C、Ctrl+V...
      

  2.   

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (((keyData & Keys.Tab) == Keys.Tab) && ((Control.ModifierKeys & Keys.Control) == Keys.Control))
        {
            //原本要Ctrl+Tab键的时候到达这里,但我按Ctrl+O的时候也到了这里
            //keyData=131151,Keys.O=79,Keys.Tab=9
            ....
        }
    }
                            ----楼主
      

  3.   

    加了flagsattribute,判断时就一定要这样
    (((keyData & Keys.Tab) == Keys.Tab) && ((Control.ModifierKeys & Keys.Control) == Keys.Control))
    判断吗?
    我感觉除非定义成1,2,4,8这样,通过与或判断才行
    至于flagsattribute标记这里何用,看不出来。
      

  4.   

    是啊,我也觉得要每个值对应于二进制的一个位,才能通过位的与或判断,而Keys却不是这样,那么有办法获得值吗?若无法准确获得值,那么要这个有什么用呢?
                           ----楼主