| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > Запрет ввода в TextBox данных, кроме чисел |
| Автор: vdekameron 18.12.2014, 10:42 |
| В VB нужно сделать запрет на ввод любых данных , кроме чисел. До этого пользовался IsNumeric. А сейчас не подходит, так как эта функция блокирует дробные числа, разделенные точкой, считая их не цифрой. А у меня в проекте для удобства пользователей дробные можно вводить с точкой или с запятой. Заранее спасибо! |
| Автор: Akina 18.12.2014, 11:48 |
| Первый вопрос - когда выполняется проверка? при каждом изменении поля или только при потере фокуса? |
| Автор: vdekameron 18.12.2014, 12:23 |
| Вводится значение в текстовое поле и когда нажимается на кнопку, идет проверка. Т.е. получается при потере фокуса |
| Автор: Akina 18.12.2014, 12:33 |
| Ну так пишите в методе потери фокуса код валидации введённого значения. Если валидация не прошла - выбрасывайте сообщение и возвращайте фокус на поле ввода. Валидация-то получается элементарная. Копируем введённый текст в переменную, заменяя запятую на точку (или наоборот - зависит от региональных установок). Проверяем переменную на Isnumeric. Всё. |
| Автор: vdekameron 18.12.2014, 13:24 |
| Ой а можно для особо одаренных)) Дело в том что я с VB на вы и шепотом((( Поэтому эти все терпины-валидация и т.д. мне не знакомы((( Можно более простым языком пожалуйста |
| Автор: Akina 18.12.2014, 13:40 | ||
Ну типа
|
| Автор: vdekameron 18.12.2014, 14:15 | ||
Объясните пожалуйста эти строчки:
просто хочется понять смысл а не тупо копировать и вставлять |
| Автор: Akina 18.12.2014, 14:34 |
| http://msdn.microsoft.com/en-us/library/aa263426(v=vs.60).aspx http://msdn.microsoft.com/en-us/library/aa445073(v=vs.60).aspx http://msdn.microsoft.com/en-us/library/aa242760(v=vs.60).aspx http://msdn.microsoft.com/en-us/library/aa241892(v=vs.60).aspx http://msdn.microsoft.com/en-us/library/aa445052(v=vs.60).aspx http://msdn.microsoft.com/en-us/library/aa243382(v=vs.60).aspx |
| Автор: vdekameron 18.12.2014, 15:19 |
| Что такое Isnumeric я знаю и уже разобрался с Mid. Что делает Cstr ??? не могу понять Неужели все так сложно и нельзя допустим при нажатии на кнопку проверять что находится в текстовом поле((. Может можно обойтись без этих потерь фокусов |
| Автор: Akina 18.12.2014, 15:30 |
Первая из шести ссылок. |
| Автор: vdekameron 18.12.2014, 16:31 | ||||
| Сайт я не ленюсь прочитать. Англ. плохо знаю , пошел в настройки языка сайта, изменил на русский написали что данная страница не доступна на русском. Написано что возвращает строковую переменную! Ну и что? я хочу понять смысл строки
Например при
Это я понял. Но что тут делает Cstr(1.1) Сайт я не ленюсь прочитать. Англ. плохо знаю , пошел в настройки языка сайта, изменил на русский написали что данная страница не доступна на русском. |
| Автор: Akina 18.12.2014, 17:34 |
Берёт ЧИСЛО 1.1 и преобразовывает его в СТРОКУ. При этом использует региональные настройки текущего пользовательского профиля. А потом Mid берёт из результата 1 символ, начиная со 2-го символа получившейся строки. Что именно он берёт и нахрена - ну уж попробуй догадаться... |
| Автор: vdekameron 19.12.2014, 08:49 | ||||
| Akina, Спасибо что не послали! И за потраченное время! Разобрался. Вот как бы я объяснил :- Cstr(1.1) показывает что 1.1 это строка, т.е. "1,1" , Соответственно Mid выбирает из 1,1 один символ, начиная со второго, т.е берет "," и присваивает это значение переменной GD(сокращенно). Затем делается выбор GD При GD="," присваиваем переменной BD значение "." И замет когда Text1.text теряет фокус делаем проверку число ли там и тут же меняем точку на запятую. У меня только 2 вопроса 1)В каком случае отработает ???
2)Почему бы ваш код не записать в таком виде, может я не прав, но мне кажется тогда мы просто избегаем этих выборов и лишних присвоений.
|
| Автор: Akina 19.12.2014, 08:54 |
Это на случай непредусмотренной национальной кодировки. Вдруг найдётся умник, который в качестве разделителя влепит, например, символ доллара? Представьте, что код попал на станцию, где установлена аглицкая национальная кодировка. |
| Автор: Akina 19.12.2014, 09:53 |
| vdekameron, речь идёт о реакции программы на интерактивное взаимодействие с пользователем. А по сравнению с программой, даже если пальцы летают по клавиатуре, юзер - безнадёжнейший тормоз. И горсть лишнего кода (кстати, не такая уж и большая) на скорость работы никак не повлияет. Зато появится уверенность, что если, допустим, шеф завтра припрётся со своим ноутом, на котором немецкая, скажем, винда - у программы всё равно проблем не возникнет. Вот в расчётную часть я бы никаких дополнений не пихал. |
| Автор: vdekameron 19.12.2014, 10:22 |
| Спасибо! |
| Автор: windcastle 4.2.2015, 22:10 |
| Попробуй это! |