限制TextBox中允许的字符(输入金额)

时间:2011-09-04 18:53:56

标签: c# winforms textbox currency restrict

所以我有一个小计TextBox,可以输入$ 546.75这样的金额。现在,我想确保只有数字,一个小数,一个美元符号和逗号只允许每3个位置(100,000,000)。这可能吗?也许不是逗号,但至少是数字,小数和美元符号。

6 个答案:

答案 0 :(得分:4)

为什么你不把钱币“$”放在textBox的一边(在textBox的前面创建一个标签),那么你不必担心这个角色,而只需要担心数字。它看起来更好(在我看来)。 然后你可以使用这段代码:

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar != (Char)Keys.Back) //allow backspace (to delete)
        {
            e.Handled = !char.IsNumber(e.KeyChar);
        }
    }

答案 1 :(得分:2)

所有验证都应在KeyPress事件上手动执行。

Here描述了对数值值的验证。您还需要另外检查'$'符号和小数。

答案 2 :(得分:1)

答案 3 :(得分:1)

我认为您使用的是WinForms而不是WPF。如果是这种情况,那么您可以使用System.Windows.Forms.ErrorProvider(您可以将工具箱中的一个拖放到表单中)以及正则表达式来进行验证。

警告:下面的正则表达式模式字符串可能不是您想要的,但希望传达这个想法。

一些比赛示例......“$ 4,000.00”,“ - $ 4000.00”,“ - $ 400.00”

    private void textBox1_Validating(object sender, CancelEventArgs e)
    {
        string error = null;
        string pattern = @"^\$?\-?([1-9]{1}[0-9]{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))$|^\-?\$?([1-9]{1}\d{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))$|^\(\$?([1-9]{1}\d{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))\)$";

        if (!Regex.IsMatch(textBox1.Text, pattern))
        {
            error = "Please enter a US currency value.";
            e.Cancel = true;
        }
        errorProvider1.SetError((Control)sender, error);
    }

答案 4 :(得分:1)

// tb - 是文本框的名称

    private void tb_PreviewTextInput(object sender, TextCompositionEventArgs e)
    {
        char[] inputChar = e.Text.ToCharArray();

        if (char.IsNumber(inputChar[0]))
        {
            e.Handled = false;
        }
        else
        {
            e.Handled = true;
        }

//另一种方法。

        if (char.IsDigit(inputChar[0]))
        {
            e.Handled = false;
        }
        else
        {
            e.Handled = true;
        }
    }

答案 5 :(得分:0)