【问题标题】:Identify if a event Key is text (not only alphanumeric)识别事件键是否为文本(不仅是字母数字)
【发布时间】:2012-08-09 10:17:39
【问题描述】:

我有一个带有事件的文本框,当输入一些文本时该事件应该执行。很容易检查它是否是字母数字,如此处所述Can I determine if a KeyEventArg is an letter or number?

if ( ( ( e.KeyCode >= Keys.A && e.KeyCode <= Keys.Z ) ||
( e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9 ) ||
( e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9 ) )

这种方法的问题是我还应该使用Key.OemMinusKey.OemQuestion 等手动检查-?!¿[]()

有什么方法可以检查它是文本按键还是我应该手动检查(我认为这不是很优雅)?

【问题讨论】:

  • 您真的要排除所有没有键的字符吗?例如,我的键盘没有Є 键,但可以说它仍然是文本。
  • 这是一个很好的问题,因为我应该能够使用 ñ 来触发这个事件。我想我应该检查这个字符是否可打印或类似的东西。我想排除 Ins、Arrows、F's、Enter、Tab 等。
  • 对照正则表达式检查文本是否可以解决?
  • 正则表达式 \p{C} 匹配不可见的控制字符和未使用的代码点。这些字符是否映射到键是无关紧要的。
  • 当我按下 时只是为了澄清?我得到 e.Key 等于 Key.OemQuestion,我无法从中得到?。

标签: c# wpf keyboard-events


【解决方案1】:

由于没有建议其他选项,我使用以下代码来允许几乎所有的文本击键。不幸的是,这取决于键盘,所以它不是很优雅。希望不是应用程序中的关键方面,它只是可用性问题。

bool isText = (e.Key >= Key.A && e.Key <= Key.Z) || (e.Key >= Key.D0 && e.Key <= Key.D9) || (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9)
            || e.Key == Key.OemQuestion || e.Key == Key.OemQuotes || e.Key == Key.OemPlus || e.Key == Key.OemOpenBrackets || e.Key == Key.OemCloseBrackets || e.Key == Key.OemMinus
             || e.Key == Key.DeadCharProcessed || e.Key == Key.Oem1 || e.Key == Key.Oem7 || e.Key == Key.OemPeriod || e.Key == Key.OemComma || e.Key == Key.OemMinus
              || e.Key == Key.Add || e.Key == Key.Divide || e.Key == Key.Multiply || e.Key == Key.Subtract || e.Key == Key.Oem102 || e.Key == Key.Decimal;

【讨论】:

    【解决方案2】:

    这段代码只允许数字和'.':

        private void txtJustNumber_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit((char)(e.KeyChar)) &&
                e.KeyChar != ((char)(Keys.Enter)) &&
                e.KeyChar != (char)(Keys.Delete) &&
                e.KeyChar != (char)(Keys.Back))             
            {
                e.Handled = true;
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2010-10-28
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-26
      • 2011-08-08
      相关资源
      最近更新 更多