Эта, по-видимому, простая задача привела к некоторой головной боли. Я просто хочу, чтобы пользователь вводил любой текст, который преуспевает float.TryParse
в текстовый элемент управления.C# Проверка ввода для текстового поля: поплавок
Я мог бы использовать обычный TextBox и проверять текст в каком-то btnOK_Click, но это, очевидно, хромает. Кроме того, есть хороший встроенный элемент управления MaskedTextBox, но я не смог установить его маску равным float.TryParse
. Кроме того, кажется, что проверка действительна только тогда, когда происходит смена фокуса.
Выкапывание в сети принесло интересные идеи, но ни один из них не так хорош, как хотелось бы.
Как вы решили эту проблему? Я просто пропустил очевидное решение, или мне нужно реализовать эту функциональность самостоятельно?
Я знаю несколько подобных потоков на SO, но не было приемлемого решения, которое можно найти.
Обновление: Да, WinForms.
В моем окончательном решении я кэширую последнее действительное значение и, при необходимости, сбрасываю текст, если фокус потерян. – mafu
Ваша идея изменить цвет была приятной. В моем решении раскраска сразу по недопустимым значениям делает очевидным для пользователя, что он должен изменить значение. – mafu
Я поместил TryParse() в TextChanged и установил backcolor текстового поля на красный, когда TryParse сработает и сбросит backcolor на Color.Empty, когда TryParse пройдет. Это дает мгновенную обратную связь, когда пользователь вводит данные. – CleanCoder