一尘不染

如何制作仅接受数字的文本框?

c#

我有一个带有文本框控件的Windows窗体应用程序,我只想接受整数值。过去,我通过重载KeyPress事件并仅删除不符合规范的字符来进行这种验证。我已经看过MaskedTextBox控件,但是我想要一个更通用的解决方案,它可以使用正则表达式,也可以依赖于其他控件的值。

理想情况下,这样做是为了使按下非数字字符不会产生任何结果,或者会立即向用户提供有关无效字符的反馈。


阅读 192

收藏
2020-05-19

共1个答案

一尘不染

两种选择:

  1. 使用NumericUpDown代替。NumericUpDown为您进行过滤,这很好。当然,它还使您的用户能够按键盘上的向上和向下箭头来增加和减少当前值。

  2. 处理适当的键盘事件,以防止除数字输入之外的任何操作。我已经在标准TextBox上成功使用了这两个事件处理程序:

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    

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

    // only allow one decimal point
    if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
    {
        e.Handled = true;
    }
    

    }

如果您的TextBox不允许小数位,则可以删除该检查'.'(以及随后的多个检查'.')。您还可以添加一个检查,以'-'确定您的TextBox是否应允许负值。

如果要限制用户的位数,请使用: textBox1.MaxLength = 2; // this will allow the user to enter only 2 digits

2020-05-19