Программирование
Веб программирование

Запрет ввода букв в поле ввода.

 
 


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


Private Sub Text1_KeyPress(KeyAscii As Integer) 'Отлавливаем ввод
  If (IsNumeric(Chr(KeyAscii)) = False) And (KeyAscii <> 8) Then
    If KeyAscii = 44 Then 'запятая
      KeyAscii = 46 'меняем запятую на точку, т.к. VB не любит запятые в Float.
    Else
      KeyAscii = 0
    End If
  End If
End Sub



Если не используете API, Вы не сможете контролировать ввод текста из буфера обмена в Textbox - бейсик не дает Вам такой возможности. Поэтому, если для Вас важен тип введенного значения, в самом коде проверяете переменную на число, только ради аллаха, не используйте для этого Val:

dim intvalue

intvalue=text1.text

if IsNumeric(intvalue) then

    ...

else

msgbox "Ошибка",16,"Введенное значение не является числовым"

end if


Есть вопросы? Спроси на нашем форуме!!
Progers300 [21.06.2014 23:47]

Синтаксис, в СТУДИЮ!

BrandFA [20.07.2014 05:40]

IsNumeric в своё время (в 2008 .Net) требовал допилки из-за пропуска подобных "3e5" значений. Уже поправили?

pjp07190 [11.11.2014 08:54]

Хотя код и блокирует ввод не числовых символов и заменяет "," на ".", но явно сыроват.

1. Не позволяет ввести "."
2. Вот что можно, например, ввести 000456.....67788

Stertor370 [11.11.2014 14:50]

Точку не положено вводить, только запятую.
Что касается "000456.....67788", это выходит за пределы моего примера. Статья называется: "Запрет ввода букв в поле ввода".

Но всё же, раз ты поднял тему, добавлю: чтобы не было вышеупомянутых багов, нужно после каждого OnKeyDown дополнительно проверять, что вводится, и удалять лишнее.

pjp07190 [11.11.2014 15:54]

Ну да, здесь появляются дополнительные проверки: повторного ввода лидирующих нулей и повторных запятых. Можно было бы сделать корректно работающую законченную функцию. И народ бы поучился.
Дело вкуса, но я бы упростил и не вводил функции вида IsNumeric(Chr(KeyAscii)), просто ограничился бы Ascii кодами, которые для цифр, как известно 48...57. Простота напрямую связана с надежностью.

Stertor370 [11.11.2014 19:45]


"Простота напрямую связана с надежностью." - Вот именно. Нет смысла изобретать велосипед. В делфях можно было бы сделать так:

if Key in [48..57] then
...

А в бейсике лучше юзать готовую функцию - IsNumeric.

pjp07190 [12.11.2014 08:54]

KeyAscii>=48 and KeyAscii<=57

Stertor370 [12.11.2014 09:53]

Хорошо. Пусть будет так.

SIRIUS30 [02.01.2015 15:23]

Встроенные в текстбокс возможности использовать никак?
Я имею ввиду класс текстбокса из системной библиотеки.

Stertor370 [02.01.2015 17:26]

Тут не такие дети, чтобы win api вызывать.

SIRIUS30 [02.01.2015 17:55]

Вижу тут совсем другие дети)))

Хотят они или нет, они используют апи.

pjp07190 [06.01.2015 08:22]

SIRIUS
Встроенные в текстбокс возможности использовать никак?
Я имею ввиду класс текстбокса из системной библиотеки.

А вы поделитесь, приведите примерчик. Думаю всем будет интересно.

Stertor370 [06.01.2015 11:06]

Если честно, я не понимаю, о каких встроенных возможностях textbox он говорит; если бы была встроенная возможность запрета букв, люди бы не извращались. Способ же, основанный на WinAPI - оверридить функцию окна и самому обрабатывать некоторые сообщения. Я сильно сомневаюсь, что кто-то кроме меня тут станет ебать себе мозги этим.

SIRIUS30 [02.12.2015 01:48]

Ну че, год заканчивается скоро. Отвлекся я, забыл про свой пост.
Ещё не поняли о каких возможностях говорил, хотя я и это сказал.
Или всё таки нашли примеры, научились делать текстбокс цифровым?

SIRIUS30 [02.12.2015 01:56]

Const GWLSTYLE As Long = -16&
Const ES
NUMBER As Long = &H2000&

SetWindowLongA Text1.hwnd, GWLSTYLE, GetWindowLongA(Text1.hwnd, GWLSTYLE) Or ES_NUMBER 'Окошко только для цифр

SIRIUS30 [02.12.2015 02:11]

Ну и кроме этого, ТС для справки
Аллах(арабское слово Бог) нормально пишется с большой буквы
и во многих религиях он не упоминается в суе.
Он же всё таки Бог, Творец вообще всего.
Упоминаете Бога? Хорошо! я подсказываю как правильнее.

Stertor [02.09.2017 23:50]

Если кому-то интересно, я сейчас обитаю здесь:
FreeSoft.do.am - бесплатные программы, исходники, видеоуроки.



Оставлять комментарии можно только зарегистрированным




Предупреждение: Вся информация представлена исключительно в образовательных целях.
Ни авторы, ни администрация не несут ответственности в случае ее использования в противозаконных целях.