1

我试图阻止用户在按键事件中输入单引号。似乎是一件足够简单的事情。我只需要使用 KeyChar。当我转换为 char 并与 Keys.Right (右箭头)进行比较时,由于某些奇怪的原因,单引号是匹配的。我对此感到困惑。知道为什么单引号会匹配右箭头吗?我看到的所有示例都只使用相同的转换来与键进行比较。

Func<char, bool> IsEditingKey = k =>
            {
                if (k == (char)Keys.Left || k == (char)Keys.Right || k == (char)Keys.Delete || k == (char)Keys.Back)
                {
                    return true;
                }

               return false;
           };

如果我传入一个单引号 ('),当 k == (char)Keys.Right 的测试发生时,它返回 true。我现在可能是一个演员问题,但我还能如何比较以确保它确实是正确的箭头而不是单引号(')?

4

3 回答 3

3

使用它从转换Keyschar

KeysConverter kc = new KeysConverter();
char c = Convert.ToChar(kc.ConvertToString(Keys.Left))));
于 2012-04-19T21:25:24.547 回答
3

您正在将字符与虚拟键混合。不是一回事。Keys.Right 的值为 0x27。 '\''也是0x27。一个是枚举,另一个是char。

您需要使用正确的事件来区分两者。KeyDown 事件为您提供虚拟键。KeyPress 事件为您提供键入字符,该字符是在虚拟键由用户首选的键盘布局转换后产生的。由于您只对字符感兴趣,而不对虚拟键感兴趣,因此您必须使用 KeyPress。设置 e.Handled = true 以抑制它。

于 2012-04-19T21:44:22.370 回答
0

尝试使用 KeyDown 事件,而不是 KeyPress 事件。这使用了您正在寻找的 KeyEventArgs。

textBox1.KeyDown += new KeyEventHandler(textBox1_KeyDown);

void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
      if (e.KeyCode == Keys.Right)
      {
        //Do Something
      }
    }
于 2012-04-19T21:38:06.097 回答