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

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

理想情况下,这会表现为按下非数字字符将不会产生结果,或者立即向用户提供有关无效字符的反馈。


两种选择:

  • 改为使用NumericUpDown 。 NumericUpDown为你做了过滤,这很好。 当然,它也使您的用户能够按下键盘上的向上和向下箭头来递增和递减当前值。

  • 处理适当的键盘事件以防止除数字输入之外的任何事件。 这两个事件处理程序在标准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不应该允许小数位。 如果你的文本框应该允许负值,你也可以添加一个'-'的检查。

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


    只是因为在一条线上做东西总是更有趣......

     private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar);
        }
    

    注意:这不会阻止用户复制/粘贴到此文本框中。 这不是一种安全无害的方式来清理数据。


    我假设从上下文和你使用的标签,你正在编写一个.NET C#应用程序。 在这种情况下,您可以订阅文本更改事件,并验证每个关键笔划。

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if (System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text, "[^0-9]"))
            {
                MessageBox.Show("Please enter only numbers.");
                textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);
            }
        }
    
    链接地址: http://www.djcxy.com/p/17191.html

    上一篇: How do I make a textbox that only accepts numbers?

    下一篇: Any good ORM tools for Android development?