Ограничить символы, разрешенные в TextBox (ввод суммы денег) - PullRequest
1 голос
/ 04 сентября 2011

Итак, у меня есть промежуточный текстовый ящик, в который можно ввести сумму, равную 546,75 долл. США. Теперь я хочу убедиться, что только цифры, ОДИН десятичный знак, символ доллара и запятые разрешены только каждые 3 места (100 000 000). Это возможно? Может быть, не запятые, но, по крайней мере, цифры, десятичные дроби и символ доллара.

Ответы [ 6 ]

4 голосов
/ 04 сентября 2011

Почему бы вам не поставить денежный знак "$" за пределы 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);
        }
    }
2 голосов
/ 04 сентября 2011

Вся проверка должна выполняться вручную для события KeyPress.

Здесь описана проверка правильности значений числовых значений. Вам нужно будет дополнительно проверить знак «$» и десятичные дроби.

1 голос
/ 03 декабря 2012

// 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;
        }
    }
1 голос
/ 05 сентября 2011

Я думаю, что вы используете WinForms, а не WPF.Если это так, то вы можете использовать System.Windows.Forms.ErrorProvider (вы можете перетащить один из набора инструментов в форму) вместе с регулярными выражениями для проверки.

ПРЕДУПРЕЖДЕНИЕ: строка шаблона регулярного выраженияниже, возможно, не совсем то, что вы хотите, но, надеюсь, передает идею.

Некоторые примеры соответствий ... "$ 4000,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);
    }
1 голос
/ 04 сентября 2011

Существует ряд статей о числовых текстовых полях

Числовой текстовый блок

http://www.daniweb.com/software-development/csharp/threads/95153

http://www.codeproject.com/KB/vb/NumericTextBox.aspx

Я использую этот в своих проектах

http://www.codeproject.com/KB/edit/ValidatingTextBoxControls.aspx

0 голосов
/ 15 декабря 2015
...