【问题标题】:How to get characters read from the keyboard?如何从键盘读取字符?
【发布时间】:2010-03-24 01:14:37
【问题描述】:

我正在尝试将从键盘读取的字符放入某个变量中以进行进一步操作。如果用户输入,我希望识别以下列表。

键盘条目列表:

  • 信件
  • [
  • ]
  • ~
  • ^
  • 数字

部分代码:

 void HookManager_KeyUp(object sender, KeyEventArgs e)
 {
       string test = e.KeyCode.ToString();

这里的数字、字母和方括号有效,但需要 shift 键的 ^ 读取不正确。例如。它将键 6 上的 ^ 读取为字符串值 6 而不是 ^ 应该是。这是其他读数

  • [ = OemOpenBracket,
  • ] = Oem6,
  • ~ = 代号,
  • ^ = D6。

所以 D6 没有意义任何帮助将不胜感激。

谢谢

AA

【问题讨论】:

    标签: c# .net wpf windows winforms


    【解决方案1】:

    除了检查 KeyCode 属性之外,您还需要检查 e.Shift 是否为真。

    【讨论】:

    • 好的。这就是我所拥有的。它显示为 [ --> OemOpenBracket, ] --> Oem6, ~ --> OemTilde, ^ --> D6。所以 D6 没有意义。
    • 字符和数字被转换为大写字符,所以我显示为我不应该是这种情况
    • BTW e.Shift 永远不会是真的——即使我使用 shift 键
    【解决方案2】:

    这样做会更容易:

    私有只读字符串 VALID_KEYS = "[]~^ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; 私人无效txtBox_KeyPress(对象发送者,KeyPressEventArgs e){ if (VALID_KEYS.IndexOf(char.ToUpper(e.KeyChar)) != -1 || e.KeyChar == (char)8) e.Handled = false; 别的 e.Handled = true; }

    【讨论】:

    • 其实我想要用户输入的字母、数字和特殊字符(如上所列)的组合。我正在检查,我需要将这些附加到我的变量中。所以我需要评估用户 r 的想法,这些将用于进一步的评估
    【解决方案3】:

    这可能会有所帮助...

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            const int WM_KEYDOWN = 0x100;
            const int WM_SYSKEYDOWN = 0x104;
    
            if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
            {
                switch (keyData)
                {
                    case Keys.Shift | Keys.D6:
                        //Your code
                        break;
                }
            }
    
            return base.ProcessCmdKey(ref msg, keyData);
        }
    

    谢谢, 拉姆

    【讨论】:

      猜你喜欢
      • 2011-12-04
      • 1970-01-01
      • 2011-12-21
      • 2020-09-25
      • 2017-06-24
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 2021-01-11
      相关资源
      最近更新 更多