Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрет ввода в TextBox данных, кроме чисел 
V
    Опции темы
vdekameron
Дата 18.12.2014, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 15.12.2014

Репутация: нет
Всего: нет



В VB нужно сделать запрет на ввод любых данных , кроме чисел. До этого пользовался IsNumeric. А сейчас не подходит, так как эта функция блокирует дробные числа, разделенные точкой, считая их не цифрой. А у меня в проекте для удобства пользователей дробные можно вводить с точкой или с запятой. Заранее спасибо!
PM MAIL   Вверх
Akina
Дата 18.12.2014, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 453



Первый вопрос - когда выполняется проверка? при каждом изменении поля или только при потере фокуса?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
vdekameron
Дата 18.12.2014, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 15.12.2014

Репутация: нет
Всего: нет



Вводится значение в текстовое поле и когда нажимается на кнопку, идет проверка. Т.е. получается при потере фокуса
PM MAIL   Вверх
Akina
Дата 18.12.2014, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 453



Ну так пишите в методе потери фокуса код валидации введённого значения. Если валидация не прошла - выбрасывайте сообщение и возвращайте фокус на поле ввода.
Валидация-то получается элементарная. Копируем введённый текст в переменную, заменяя запятую на точку (или наоборот - зависит от региональных установок). Проверяем переменную на Isnumeric. Всё.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
vdekameron
Дата 18.12.2014, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 15.12.2014

Репутация: нет
Всего: нет



Ой а можно для особо одаренных)) Дело в том что я с VB на вы и шепотом((( Поэтому эти все терпины-валидация и т.д. мне не знакомы((( Можно более простым языком пожалуйста
PM MAIL   Вверх
Akina
Дата 18.12.2014, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 453



Ну типа
Код

Public GoodDelim As String
Public BadDelim As String

Sub Form_Load
GoodDelim = Mid(Cstr(1.1),2,1)
Select Case GoodDelim 
  Case "."
    BadDelim = ","
  Case ","
    BadDelim = "."
  Case Else
    MsgBox "Да тут ваще хрен поймёшь что!", vbOKOnly
    Unload Me
End Select
End Sub

Sub Text1_LostFocus
If Not IsNumeric(Replace(Text1.Text,BadDelim,GoodDelim)) Then 
  MsgBox "Вы ввели хрень!" & vbNewLine & "Извольте исправиться...", vbOKOnly
  Text1.SetFocus 
End If
End Sub




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
vdekameron
Дата 18.12.2014, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 15.12.2014

Репутация: нет
Всего: нет



Объясните пожалуйста эти строчки:
Код

GoodDelim = Mid(Cstr(1.1),2,1)
If Not IsNumeric(Replace(Text1.Text,BadDelim,GoodDelim)) Then 


просто хочется понять смысл а не тупо копировать и вставлять
PM MAIL   Вверх
Akina
Дата 18.12.2014, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 453





--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
vdekameron
Дата 18.12.2014, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 15.12.2014

Репутация: нет
Всего: нет



Что такое Isnumeric я знаю и уже разобрался с Mid. Что делает Cstr ??? не могу понять
Неужели все так сложно и нельзя допустим при нажатии на кнопку проверять что находится в текстовом поле((. Может можно обойтись без этих потерь фокусов
PM MAIL   Вверх
Akina
Дата 18.12.2014, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 453



Цитата(vdekameron @  18.12.2014,  16:19 Найти цитируемый пост)
 Что делает Cstr ??? не могу понять

Первая из шести ссылок.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
vdekameron
Дата 18.12.2014, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 15.12.2014

Репутация: нет
Всего: нет



Сайт я не ленюсь прочитать. Англ. плохо знаю , пошел в настройки языка сайта, изменил на русский написали что данная страница не доступна на русском.
Написано что возвращает строковую переменную! Ну и что? я хочу понять смысл строки
Код

GoodDelim = Mid(Cstr(1.1),2,1)

Например при
Код

GoodDelim = "Я хочу выполнить проверку"
а=Mid(GoodDelim,3,4)
a="хочу"

Это я понял. Но что тут делает Cstr(1.1)
Сайт я не ленюсь прочитать. Англ. плохо знаю , пошел в настройки языка сайта, изменил на русский написали что данная страница не доступна на русском.
PM MAIL   Вверх
Akina
Дата 18.12.2014, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 453



Цитата(vdekameron @  18.12.2014,  17:31 Найти цитируемый пост)
что тут делает Cstr(1.1)

Берёт ЧИСЛО 1.1 и преобразовывает его в СТРОКУ. При этом использует региональные настройки текущего пользовательского профиля.
А потом Mid берёт из результата 1 символ, начиная со 2-го символа получившейся строки. Что именно он берёт и нахрена - ну уж попробуй догадаться...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
vdekameron
Дата 19.12.2014, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 15.12.2014

Репутация: нет
Всего: нет



Akina,  Спасибо что не послали! И за потраченное время! Разобрался. Вот как бы я объяснил :- Cstr(1.1) показывает что 1.1 это строка, т.е. "1,1" , Соответственно Mid выбирает из 1,1 один символ, начиная со второго, т.е берет "," и присваивает это значение переменной GD(сокращенно). Затем делается выбор GD  При GD="," присваиваем переменной BD значение "." И замет когда Text1.text теряет фокус делаем проверку число ли там и тут же меняем точку на запятую.

У меня только 2 вопроса smile ) Опять чисто из интереса)))
1)В каком случае отработает ???
Код

 Case Else
    MsgBox "Да тут ваще хрен поймёшь что!", vbOKOnly

2)Почему бы ваш код не записать в таком виде, может я не прав, но мне кажется тогда мы просто избегаем этих выборов и лишних присвоений.
Код

Sub Text1_LostFocus()
If Not IsNumeric(Replace(Text1.Text, ".", ",")) Then
  MsgBox "Вы ввели хрень!" & vbNewLine & "Извольте исправиться...", vbOKOnly
  Text1.SetFocus
 End If
End Sub

PM MAIL   Вверх
Akina
Дата 19.12.2014, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 453



Цитата(vdekameron @  19.12.2014,  09:49 Найти цитируемый пост)
В каком случае отработает ???

Это на случай непредусмотренной национальной кодировки. Вдруг найдётся умник, который в качестве разделителя влепит, например, символ доллара?

Цитата(vdekameron @  19.12.2014,  09:49 Найти цитируемый пост)
Почему бы ваш код не записать в таком виде

Представьте, что код попал на станцию, где установлена аглицкая национальная кодировка. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
vdekameron
Дата 19.12.2014, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 15.12.2014

Репутация: нет
Всего: нет



Цитата(Akina @  19.12.2014,  08:54 Найти цитируемый пост)
Это на случай непредусмотренной национальной кодировки. Вдруг найдётся умник, который в качестве разделителя влепит, например, символ доллара?


Ну вы написали код на все случаи жизни))) smile  Ну а если взять во внимание что будет работать только на рускоязычных виндах, тогда все отработает по идее нормально

PM MAIL   Вверх
Akina
Дата 19.12.2014, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 453



vdekameron, речь идёт о реакции программы на интерактивное взаимодействие с пользователем. А по сравнению с программой, даже если пальцы летают по клавиатуре, юзер - безнадёжнейший тормоз. И горсть лишнего кода (кстати, не такая уж и большая) на скорость работы никак не повлияет.
Зато появится уверенность, что если, допустим, шеф завтра припрётся со своим ноутом, на котором немецкая, скажем, винда - у программы всё равно проблем не возникнет.
Вот в расчётную часть я бы никаких дополнений не пихал.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
vdekameron
Дата 19.12.2014, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 15.12.2014

Репутация: нет
Всего: нет



Спасибо!
PM MAIL   Вверх
windcastle
Дата 4.2.2015, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 4.2.2015

Репутация: нет
Всего: нет



Попробуй это!

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  Ввод_только_точки_b_чисел.rar 3,80 Kb
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.1623 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.