C# - e.KeyChar!='。'不工作

时间:2014-05-21 11:26:41

标签: c# events

在我的Windows窗体应用程序中,我有一个TextBox并将KeyPress事件应用于它只接受数字。目前,我的脚本是这样的:

    if (!char.IsControl(e.KeyChar)
        && !char.IsDigit(e.KeyChar) 
        && e.KeyChar != '.')
    {
        e.Handled = true;
    }

问题在于e.KeyChar != '.'它不起作用,我的TextBox接受数字和点。我不明白为什么因为我对脚本说如果按下的键与点(。)不同,则不输入它。我收到的一些值的例子是:

  • x8361 - 不接受
  • 56491 - 接受
  • 15466.5 - 接受:这是失败。它可能不接受,但!=在那里没有做任何事情。

2 个答案:

答案 0 :(得分:3)

除非我遗漏了某些内容,否则检查

e.Handled = !(char.IsControl(e.KeyChar) || char.IsDigit(e.KeyChar) || e.KeyChar == '.');

这绝不是一个完整的解决方案,但是因为这仍然允许像12345.67.89.这样的值,这些值显然没有正确的数字格式。

更强大的解决方案是使用MaskedTextBox或允许自由文本,但验证整个输入,而不是每个人char

答案 1 :(得分:1)

更好的解决方案。有了这个,您只能使用:0123456789和退格

        if (!char.IsDigit(e.KeyChar) && e.KeyChar != '\b')
            e.Handled = true