比如在NumLock键关闭的情况下,数字键4和方向键<-的keyvalue是相同的,
这种情况下怎么区分这两个键的keydown事件。
听说可以通过扫描码区分,但是怎样获得扫描码呢?
或者谁还有其他的方法吗?

解决方案 »

  1.   

    private void Sequence_KeyDown(object sender, KeyEventArgs e)
            {
                MessageBox.Show(e.KeyCode.ToString());
            }
    一个是Left,一个是D4
      

  2.   

    不知道这个可不可以,很久以前用过
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
            {
                switch (keyData)
                {
    case Keys.Up
    ......
      

  3.   

    还是不行啊,关闭numlock后
    数字键4和向左的方向键的keycode都是left啊
      

  4.   

    // 可以用 msg.LParam 来区分 NumPad4, Left, 左右 Alt, Ctrl, Shift, 两个Enter 键using System.Windows.Forms;class Test : Form
    {
      protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
      {
        string s = string.Empty;
        switch ((int)msg.LParam)
        {
          case 0x004b0001 : s = "NumPad4" ; break;
          case 0x014b0001 : s = "Left"    ; break;
          case 0x20380001 : s = "LAlt"    ; break;
          case 0x21380001 : s = "RAlt"    ; break;
          case 0x001d0001 : s = "LControl"; break;
          case 0x011d0001 : s = "RControl"; break;
          case 0x002a0001 : s = "LShift"  ; break;
          case 0x00360001 : s = "RShift"  ; break;
          case 0x001c0001 : s = "Enter"   ; break;
          case 0x011c0001 : s = "PadEnter"; break;
        }
        MessageBox.Show(msg + "\r\n" + keyData + "\r\n" + s);
        return base.ProcessCmdKey(ref msg, keyData);
      }  static void Main()
      {
        Application.Run(new Test());
      }
    }
      

  5.   

    // 命令键是始终比常规输入键具有优先权的键。命令键的示例包括快捷键和菜单快捷方式。
    // 在派生类中重写 ProcessCmdKey 方法时,控件应返回 true 以指示它已处理该键。
    // 对于未由该控件处理的键,应返回调用基类的 ProcessCmdKey 方法的结果。using System.Windows.Forms;class Test : Form
    {
      protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
      {
        switch (keyData)
        {
          case Keys.Apps              : // 应用程序键
          case Keys.RWin              : // 右 Win 键
          case Keys.Menu | Keys.Alt   : // Alt 键
          case Keys.F4   | Keys.Shift : // Shift-F4 键
            MessageBox.Show("Key Press : " + keyData);
            return true;
        }
        return base.ProcessCmdKey (ref msg, keyData);
      }  static void Main()
      {
        Application.Run(new Test());
      }
    }
      

  6.   

    wuyi8808的方法有效
    太感谢了