char.IsNumber()

时间:2012-07-25 10:57:12

标签: c# winforms

我正在构建一个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()的作用。有人可以详细解释一下吗?

4 个答案:

答案 0 :(得分:7)

如果字符是数字(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',这很可能是您想要的。

答案 1 :(得分:5)

您正确使用Char.IsNumber(),如果传递的字符符合数字,则会返回true

您的问题在于Handled属性。当你将它设置为true时,你基本上告诉框架我已经处理了这个,你没有其他事情与该事件,这可以防止默认行为被执行。换句话说,您将Handled设置为true的字符将被忽略。

这就是你必须改变你的状况的原因:

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

试试这个

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