2

我正在构建一个 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

4 回答 4

7

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

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

因此,您的代码实际上意味着:

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

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

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

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

于 2012-07-25T11:00:16.610 回答
5

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

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

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

if (!Char.IsNumber(e.KeyChar)) {
    // e.KeyChar is not a number, block it.
    e.Handled = true;
}
于 2012-07-25T11:01:17.360 回答
2

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

于 2012-07-25T11:00:34.643 回答
2

试试这个

if(!char.IsNumber(e.KeyChar))
           e.Handled=true;
于 2012-07-25T11:01:40.183 回答