проблема с фильтрацией текстового поля в приложении Windows

Мое требование: я хочу ввести десятичное значение в свое текстовое поле. В случае, если пользователь ввел .dot, он должен ввести 3 десятичных значения, в противном случае он не должен позволять покинуть текстовое поле. Если пользователь не ввел .dot, он может разрешить ввести любой номер цифры, как ограничить это в текстовом поле .net winforms.

десятичный ((1-9),3)

Перед запятой может быть любое десятичное значение, например

Истинный случай

123--- 1232.004--- 123123123123.555--- 3123123123--- .231---

Ложный случай

123.--- 222.33--- 123.3--- 21312323.1232133--- .2--- .12313---


person TinTin    schedule 20.07.2010    source источник


Ответы (3)


Подпишитесь на событие TextBox Validating:

private void TextBox_Validating(object sender, CancelEventArgs e)
{
    string Text = ((TextBox)sender).Text;        
    string[] Parts = Text.Split(new char[] { '.' });
    decimal Dummy;
    e.Cancel = !decimal.TryParse(Text, out Dummy) || 
        ((Parts.Length == 2) && (Parts[1].Length != 3));
}

Или вы можете использовать регулярные выражения для текста. подтверждение или что-то еще. Но основная идея заключается в том, что если вы отмените проверку в текстовом поле, пользователь не сможет оставить его по умолчанию. Проверьте также свойство AutoValidate.

person arbiter    schedule 20.07.2010

Просто обработайте событие Validating и проверьте наличие ., если вы найдете его, убедитесь, что за ним следуют 3 цифры.

Просто используйте IndexOf, чтобы найти точки, убедитесь, что строка содержит как минимум еще 3 символа после этого индекса, а затем выведите следующие 3 символа и убедитесь, что они все цифры.

person Hans Olsson    schedule 20.07.2010

Или разбейте запись на два текстовых поля, одно для цифр до точки, второе для трех цифр после точки.

Это похоже на ввод SSN с 3 текстовыми полями.

person Beth    schedule 21.07.2010