【问题标题】:char.IsNumber()char.IsNumber()
【发布时间】:2012-07-23 19:02:16
【问题描述】:

我正在构建一个 Windows 窗体应用程序。我使用char.IsNumber() 来检查按下的键是否为数字:

   private void AmBox_KeyPress(object sender, KeyPressEventArgs e)
   {
       if(char.IsNumber(e.KeyChar))
           e.Handled=true;
   }

MSDN 说char.IsNumber() 检查键字符是否为数字,因此如果它是数字则返回 true。从我所看到的情况来看,结果是相反的——它忽略了数字(1,2,3....)而不是字符(A,a,b,c...)。

如果我使用!char.IsNumber(); 可以解决问题,但我无法理解char.IsNumber() 这个方法的作用。谁能详细解释一下?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    char.IsNumber() 返回true,如果字符是数字('0''1'、...'9')。

    e.Handled = true“这个事件已经被处理了,所以忽略它”

    所以你的代码实际上意味着:

    if (e.KeyChar is a number)
        Ignore this event
    

    这样看,您可能会明白为什么您的代码只忽略数字。

    所以使用!char.IsNumber()的解决方案是正确的,因为它基本上说“如果字符不是数字,忽略这个事件”

    另外,请注意您可能正在寻找Char.IsDigit,因为Char.IsNumber 也将其他字符识别为数字。 Char.IsDigit 仅将 true 返回到 '0''9',这很可能是您想要的。

    【讨论】:

    • 请注意,不仅仅是'0''9'IsNumber() 可以识别 UNICODE,因此它将返回 true,例如Eastern ArabicChinese 数字。
    • @FrédéricHamidi 在您撰写评论时,我已经在比较这两种方法。好点:)
    【解决方案2】:

    试试这个

    if(!char.IsNumber(e.KeyChar))
               e.Handled=true;
    

    【讨论】:

      【解决方案3】:

      您正确使用了Char.IsNumber(),如果传递的字符符合数字要求,它确实返回true

      您的问题在于Handled 属性。当您将其设置为true 时,您基本上是在告诉框架我已经处理了这个,您与该事件没有任何关系,这会阻止执行默认行为。换句话说,您将Handled 设置为true 的字符将被忽略。

      这就是为什么你必须颠倒你的条件:

      if (!Char.IsNumber(e.KeyChar)) {
          // e.KeyChar is not a number, block it.
          e.Handled = true;
      }
      

      【讨论】:

        【解决方案4】:

        更有可能是因为当字符是数字时您将事件标记为已处理,所以事件不会“冒泡”到实际处理它的任何方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-04-27
          • 2010-09-18
          • 2011-05-28
          • 1970-01-01
          • 2017-12-03
          相关资源
          最近更新 更多