如何将文本框设置为仅允许数字、一 (1) 个逗号和破折号(用于负数)开头

How to set a textbox to allow only numbers, one (1) comma, AND a dash (for negative numbers) at the beginning

这是一个不同于通常的盒子 "i want only numbers in a textBox"

我发现需要使用 负数 数字,我宁愿将它们放在文本框中。

至此我们可以使用下面的代码轻松设置小数

  private void textBox_KeyPress_1(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;
        }
    }

并将其挂接到设计器中所需的框上 this.textBoxXX.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox_KeyPress_1);

到目前为止一切顺利,但是,如果我需要添加一个“-”并且只允许在代码的开头使用怎么办?有什么提示吗?

你可以试试像

这样的正则表达式
^[0-9]([.,][0-9]{1,3})?$

^-?\d*\.?\d*

这里是一个验证方法的例子

private void ValidateText(object sender, EventArgs e)
{
    TextBox txtBox = sender as TextBox;
    String strpattern = @"^-?\d*\.?\d*"; //Pattern is Ok
    Regex regex = new Regex(strpattern);
    if (!regex.Match(txtBox.Text).Success)
    {
        // passed
    }
}

如何将您的文本框更改为 MaskedTextBox 并具有 Mask 类似 #99990.999 的内容?

允许输入正负小数,长度和精度由掩码中9的数量决定。

此处9为可选数字,0为必填数字,.为文化适当的小数占位符,#为数字,space或+-.

请参阅屏蔽元素 definition 以供参考。