Проверка ввода C # для текстового поля: float - PullRequest
3 голосов
/ 06 мая 2009

Это якобы простое задание вызвало у меня головную боль. Я просто хочу позволить пользователю вводить любой текст, следующий за float.TryParse, в элемент управления Textboxish.

Я мог бы использовать обычный TextBox и проверить текст в некотором btnOK_Click, но это явно неэффективно. Кроме того, есть хороший встроенный элемент управления MaskedTextBox, но мне не удалось установить его маску равной float.TryParse. Кроме того, кажется, что проверка на достоверность происходит только при изменении фокуса.

Копание в сети принесло несколько интересных идей, но ни одна из них не была так хороша, как хотелось бы.

Как вы решили эту проблему? Я просто пропустил очевидное решение или мне пришлось реализовать эту функцию самому?

Мне известно о нескольких похожих потоках в SO, но не было найдено приемлемого решения.

Обновление: Да, WinForms.

Ответы [ 2 ]

6 голосов
/ 06 мая 2009

Редактировать

Что ж, это намного проще ... Просто добавьте обработчик событий Validating в текстовое поле. и сделайте TryParse в коде позади. Если он недействителен, подскажите пользователю как таковой.

Проверка завершится, когда пользователь закончит печатать и переместит фокус из TextBox, поэтому, если вам нужно выполнить проверку на лету, вы можете вместо этого обработать TextChanged или включить обработчики событий KeyPress / KeyUp

Оригинал

Это в asp.net или winforms / wpf

Если это asp.net, вы можете использовать комбинацию RegularExpressionValidator (для учета разделения через запятую, 1 десятичной точки и т. Д.) И RangeValidator для установки значений min / max для числа с плавающей запятой.

Кроме того, единственный способ гарантировать, что это будет заключить текстовое поле в панель обновления, прикрепить к нему CustomServerValidator и в функции проверки сервера, сделать TryParse для значения TextBox.Text, если оно успешно, ДЕЙСТВИТЕЛЬНО, если не получилось, НЕ ДЕЙСТВИТЕЛЬНО

4 голосов
/ 06 мая 2009

Будьте осторожны, используя Validating и проверяя на ложность. Вы можете обнаружить, что, если вы не введете действительные данные, вы не сможете отодвинуть фокус от текстового поля, что является большой проблемой при использовании.

Я решаю эту проблему, просто набрав TryParse() на LostFocus, и, если TryParse не работает, я окрашиваю фон текстового поля в красноватый оттенок, чтобы было ясно, что что-то не так.

...