代码之家  ›  专栏  ›  技术社区  ›  DxCK

穿上这件衣服控制键按下?

  •  7
  • DxCK  · 技术社区  · 15 年前

    处理时 Control.OnKeyPress 事件,有一个 KeyPressEventArgs 包含 KeyChar .

    出于可用性的原因,我需要完全相同的 密钥字符 但在处理时 OnKeyDown

    这个 KeyEventArgs 不包含任何与字符相关的数据。我是说,如果按 A 带或不带钥匙 Shift 它不影响 KeyCode KeyData KeyValue . 同样当我使用另一种语言的时候,我仍然得到了大写的英语值。

    如何获得 KeyPressEventArgs.KeyChar 里面 KeyDown 事件?

    谢谢。

    3 回复  |  直到 15 年前
        1
  •  11
  •   mastak    15 年前

    转换它。下面是一个将“A”转换为“A”的简单函数。它只转换大写字符 [答-答] 设置。值32是“A”和“A”之间的差值。。当然,你可以扩展到您的要求,或要求在这里的功能。

    char getChar( KeyEventArgs e )
    {
     int keyValue = e.KeyValue;
     if ( !e.Shift && keyValue >= (int) Keys.A && keyValue <= (int) Keys.Z )
      return (char)(keyValue + 32);
     return (char) keyValue;
    }
    

    如果需要它与当前区域性一起工作,则应重写ProcessKeyMessage控件方法:

    protected override bool ProcessKeyMessage( ref Message m )
    {
     if ( ( m.Msg == 0x102 ) || ( m.Msg == 0x106 ) ) // this is special - don't remove
     {
      char c = (char) m.WParam; // here is your char for OnKeyDown event ;)
     }
     return base.ProcessKeyMessage( ref m );
    }
    

    希望对你有帮助。

        2
  •  2
  •   Christopher B. Adkins    15 年前

    我认为你要找的实际上是KeyCode属性。

    private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
    {
        // Determine whether the key entered is the F1 key. If it is, display Help.
        if(e.KeyCode == Keys.A)
        {
            // Do something kewl
        }
        else if(e.KeyCode == Keys.B)
        {
            // Do something even kewler
        }
    }
    

    如果你只是在寻找某些钥匙,你可以设置一个开关站或任何你的心想要的。

        3
  •  0
  •   supercat    15 年前

    推荐文章