Ограничить символы, разрешенные в текстовом поле (вход в сумму денег)

StackOverflow https://stackoverflow.com/questions/7301447

Вопрос

Таким образом, у меня есть подтотальная текстовая поле, где можно ввести сумму, например, $ 546,75. Теперь я хочу убедиться, что только цифры, один десятичный, один доллар символ и запятые разрешены только каждые 3 места (100 000 000). Это возможно? Может быть, не запятые, но, по крайней мере, цифры, десятичный и долларовый символ.

Это было полезно?

Решение

Я думаю, что вы используете 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);
    }

Другие советы

Почему вы не выкладываете знак «$» на стороне текстового поля (создайте этикетку, просто Infrontof 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);
        }
    }

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

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

Есть несколько статей о числовых текстовых полях

Числовое текстовое поле

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

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

Вы пробовали элементы управления Ajax?

http://www.aspsnippets.com/articles/aspnet-ajax-filteredtextboxextender-control-example.aspx

Симплс. :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top