Как заставить пользователя ввести float в C#
Это изменение замечательно просто. (Почти так, как я это планировал, да?)
Ключевым методом, определяющим, является ли новое значение TextBox допустимым, является метод ValueIsValid. В предыдущих примерах этот метод возвращает true, если новое значение является допустимым целым числом или началом одного как в - или +. Новая версия этого метода возвращает true, если значение выглядит как float или начало одного из них.
В коде может использоваться float.TryParse, чтобы определить, является ли тестовое значение фактически плавающим, но это не всегда работает, если пользователь в процессе ввода нового значения. Например, предположим, что пользователь хочет ввести -9e-8. Это допустимый float, но в какой-то момент пользователь наберет -9e-, что не является допустимым значением.
В коде может использоваться float.TryParse, чтобы определить, является ли тестовое значение фактически плавающим, но это не всегда работает, если пользователь в процессе ввода нового значения. Например, предположим, что пользователь хочет ввести -9e-8. Это допустимый float, но в какой-то момент пользователь наберет -9e-, что не является допустимым значением.
...
К счастью, есть более простой метод. Если тестовая строка заканчивается не цифрой, просто добавьте цифру в конец и посмотрите, является ли результат действительным поплавком. Например, -9e- становится -9e-0, что является странным, но действительным. Аналогично - и + становятся -0 и +0, которые также странны, но действительны.
В следующей версии ValueIsValid используется этот подход.
// Возвращает true, если значение является действительным целым числом. private bool ValueIsValid(string text_value) { // Не допускаем пробелов. if (text_value.Contains(' ')) return false; // Разрешить пустое значение. if (text_value.Length == 0) return true; // Если текст не заканчивается цифрой, добавьте цифру // видеть, является ли он допустимым префиксом поплавка. if (!char.IsDigit(text_value, text_value.Length - 1)) text_value += "0"; // Смотрите, анализируется ли текст. float test_value; return float.TryParse(text_value, out test_value); }
Этот метод отклоняет значение, если он содержит пробельные символы и принимает пустое значение.
Далее, если значение не заканчивается цифрой, код добавляет 0. Затем метод использует float.TryParse, чтобы увидеть, является ли результат действительным поплавком.
Обратите внимание, что код по-прежнему допускает некоторые слегка запутывающие значения. Например, 1e100 не является допустимым поплавком, потому что он слишком велик (это действительный двойной), но 1e-100 действителен, потому что он по существу равен 0.0.
Предыдущие примеры позволяют пользователю вводить только целые числа, и этот пример позволяет пользователю вводить только поплавки. Вы можете легко изменить метод ValueIsValid, чтобы пользователь вводил другие типы данных, такие как байты, длинные, улунговые, двойные, десятичные и другие. С небольшой работой вы можете даже ограничить пользователя логическими значениями, такими как True, False, Yes и No.