当前位置: 代码迷 >> Windows Mobile >> 怎么获得本程序内按键键值(Smartphone)
  详细解决方案

怎么获得本程序内按键键值(Smartphone)

热度:134   发布时间:2016-04-25 07:41:26.0
如何获得本程序内按键键值(Smartphone)
C# code
        private void Form1_KeyDown(object sender, KeyEventArgs e)        {            if ((e.KeyCode == System.Windows.Forms.Keys.F1))            {                // Soft Key 1                // Not handled when menu is present.            }            if ((e.KeyCode == System.Windows.Forms.Keys.F2))            {                // Soft Key 2                // Not handled when menu is present.            }            if ((e.KeyCode == System.Windows.Forms.Keys.Up))            {                // Up            }            if ((e.KeyCode == System.Windows.Forms.Keys.Down))            {                // Down            }            if ((e.KeyCode == System.Windows.Forms.Keys.Left))            {                // Left            }            if ((e.KeyCode == System.Windows.Forms.Keys.Right))            {                // Right            }            if ((e.KeyCode == System.Windows.Forms.Keys.Enter))            {                // Enter            }            if ((e.KeyCode == System.Windows.Forms.Keys.D1))            {                //1            }            if ((e.KeyCode == System.Windows.Forms.Keys.D2))            {                // 2            }            if ((e.KeyCode == System.Windows.Forms.Keys.D3))            {                // 3            }            if ((e.KeyCode == System.Windows.Forms.Keys.D4))            {                // 4            }            if ((e.KeyCode == System.Windows.Forms.Keys.D5))            {                // 5            }            if ((e.KeyCode == System.Windows.Forms.Keys.D6))            {                // 6            }            if ((e.KeyCode == System.Windows.Forms.Keys.D7))            {                // 7            }            if ((e.KeyCode == System.Windows.Forms.Keys.D8))            {                // 8            }            if ((e.KeyCode == System.Windows.Forms.Keys.D9))            {                // 9            }            if ((e.KeyCode == System.Windows.Forms.Keys.F8))            {                // *            }            if ((e.KeyCode == System.Windows.Forms.Keys.D0))            {                // 0            }            if ((e.KeyCode == System.Windows.Forms.Keys.F9))            {                // #            }                  }

以上是VS自己生成的KeyDown事件代码可是按所有数字键、*、# 均得不到正确的KeyCode 其e.KeyCode都为:ProcessKey ,e.KeyValue都为:229 Soft Key 1、Soft Key 2还都捕捉不到没有进入事件。请问要怎么在KeyDown事件中得到正确的键值呢。因为某种原因在KeyPress事件中得到的按键结果值对我来说没用。

------解决方案--------------------
用e.KeyData试试
------解决方案--------------------
看一下MSDN

键事件按下列顺序发生: 

KeyDown

KeyPress

KeyUp

若要仅在窗体级别处理键盘事件而不允许其他控件接收键盘事件,请将窗体的 KeyPress 事件处理方法中的 KeyPressEventArgs..::.Handled 属性设置为 true。某些键,如 Tab、Return、Esc 和箭头键,由控件自动处理。为使这些键引发 KeyDown 事件,必须在窗体上的每个控件中重写 IsInputKey 方法。用于重写 IsInputKey 的代码需要确定是否按下了某个特殊键,并且需要返回一个 true 值。

有关处理事件的更多信息,请参见 使用事件。

------解决方案--------------------
你把窗体上所有的控件都删掉,用下面这段代码测试一下:
C# code
        private void Form1_KeyDown(object sender, KeyEventArgs e)        {            System.Text.StringBuilder messageBoxCS = new System.Text.StringBuilder();            messageBoxCS.AppendFormat("{0} = {1}", "Alt", e.Alt);            messageBoxCS.AppendLine();            messageBoxCS.AppendFormat("{0} = {1}", "Control", e.Control);            messageBoxCS.AppendLine();            messageBoxCS.AppendFormat("{0} = {1}", "Handled", e.Handled);            messageBoxCS.AppendLine();            messageBoxCS.AppendFormat("{0} = {1}", "KeyCode", e.KeyCode);            messageBoxCS.AppendLine();            messageBoxCS.AppendFormat("{0} = {1}", "KeyValue", e.KeyValue);            messageBoxCS.AppendLine();            messageBoxCS.AppendFormat("{0} = {1}", "KeyData", e.KeyData);            messageBoxCS.AppendLine();            messageBoxCS.AppendFormat("{0} = {1}", "Modifiers", e.Modifiers);            messageBoxCS.AppendLine();            messageBoxCS.AppendFormat("{0} = {1}", "Shift", e.Shift);            messageBoxCS.AppendLine();            messageBoxCS.AppendFormat("{0} = {1}", "SuppressKeyPress", e.SuppressKeyPress);            messageBoxCS.AppendLine();            MessageBox.Show(messageBoxCS.ToString(), "KeyDown Event");        }