我正在使用一个我想只允许数字的文本框,我发现这个说法有效。
e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar);
但是为什么呢!char.IsDigit()而不是char.IsDigit()?为什么否定?不应该是,如果我输入一个数字,IsDigits会返回true,这就是我想要的吗?
答案 0 :(得分:3)
此代码正在执行的操作是说如果没有按下数字并且它不是控制字符,则将事件标记为已处理,以便不会进行进一步处理。
因此,如果按下一个数字,则handle设置为false,以便事件继续传递并允许按键的正常处理逻辑发生。
作为澄清,请参阅Edwin de Konning评论,将Handled设置为True将阻止按键发生,因为它们将事件标记为已处理。这就是为什么操作不是。
该陈述在逻辑上等同于:
e.Handled = !(char.IsDigit(e.KeyChar) || !char.IsControl(e.KeyChar))
因此,如果字符是数字或控制字符(例如Ctrl + C),则不处理该事件。
但是,这不足以防止输入非数字字符,因为剪切和粘贴仍然有效。正如Edwin de Konnig建议的那样,你可能想看看MaskedEdit
答案 1 :(得分:2)
实际上是!char.IsDigit()还!char.IsControl()。因此,如果角色是一个数字并且一个控制角色,它将忽略您的输入。我不确定这是否真的是你想要的(他们甚至是相互排斥的,正如Bob Vale所说)。也许您还应该考虑使用MaskedTextBox。
答案 2 :(得分:2)
当拦截按键时,将e.Handled
设置为true
告诉框架该事件已经处理过,并且代表此按键操作不得执行任何操作。通过将所有不需要的按键标记为处理,您可以有效地过滤这些事件,只留下您想要查看的按键。
答案 3 :(得分:1)
你应该看看e.Handled做什么...当你把它设置为真时,不会在texbox中输入。
答案 4 :(得分:1)
让我们打破这个。
假设我们在键盘上点击1,究竟发生了什么。
现在,如果我们查看e.Handled
,我们会看到如果值assign为false,那么我们允许将值写入Textbox
,如果值为true
,则值为{{1}}不会被接受。
答案 5 :(得分:0)
上述方法有助于删除使用Shift等控制键所做的输入,这样就可以避免使用字母和特殊符号。
当您从键盘上打入数字时,没有按下控制键,因此结果为false,允许输入数字。 (您无法使用控制键输入数字)