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