我如何创建一个只接受数字的文本框?

14 浏览
0 Comments

我如何创建一个只接受数字的文本框?

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

理想情况下,这样的行为是,按下非数字字符要么不会产生结果,要么立即向用户提供有关无效字符的反馈。

admin 更改状态以发布 2023年5月23日
0
0 Comments

而且因为一行代码做事情总是更有趣...

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

注意:这并不防止用户将内容复制粘贴到文本框中。这不是一种完全安全的方法来净化您的数据。

0
0 Comments

两个选择:

  1. 使用NumericUpDown代替。 NumericUpDown为您过滤数据,这很好。 当然,它还可以让您的用户通过键盘上的上下箭头增加和减少当前值。

  2. 处理适当的键盘事件以防止除数字以外的任何输入。 我在标准文本框上使用了这两个事件处理程序:

    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;
        }
    }
    

如果您的文本框不允许小数点,则可以删除对'.'的检查(以及对多个'.'的后续检查)。 如果您的文本框应该允许负值,则还可以添加'-'的检查。

如果您想限制数字位数,则使用:textBox1.MaxLength = 2; // 这将只允许用户输入2位数字

0