Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/83: Рейтинг темы: голосов - 83, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 02.08.2009
Сообщений: 50

Условие для TextBox при вводе значений вручную

02.08.2009, 12:49. Показов 15896. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо условия для трех TextBox при вводе числовых значений в ручную.
1.Условие для TextBox2 ввод в ручную только числовых значений от 0 до 40 и от 0 -40
2.Условие для TextBox3 ввод только числовых значений не более пятизначных.
3.Условие для TextBox4 ввод только числовых значений, но если числовое значение равно или превышает на одну единицу значение TextBox3 то ввод не возможен.

Или подскажите где можно изменять данный год для создания выше перечисленных условий?

Visual Basic
1
2
3
4
5
6
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 
    If KeyAscii < 48 Or KeyAscii > 57 Then 
        KeyAscii = 0 
        MsgBox "Можно вводить только цифры", vbInformation, "Запрет ввода" 
    End If 
End Sub
По условию в TextBox2 можно вводить только числовые значения от -40 до 40.
Но при комбинации чисел, например -40- или -2- -3-3 3-2- выдается ошибка
Как сделать, чтобы минус вводился только спереди числа и негде больше?
Вложения
Тип файла: rar primer.rar (11.5 Кб, 96 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.08.2009, 12:49
Ответы с готовыми решениями:

Условие для проверки на ошибку при вводе
Есть функция выбора: int start_menu() { system(&quot;cls&quot;); while(1)//Создание первоначального пользовательского меню { ...

Как реализовать возможность "горячего" изменения значений в TextBox при вводе пользователем?
Как реализовать возможность &quot;горячего&quot; изменения значений в TextBox при вводе пользователем? Смысл: программа &quot;считалка&quot; -...

Условие при вводе в таблицу
Не могу разобраться.вылазит Ошибка. Вопрос такой. условие на значение в таблице и на форме. Желательно 2 варианта.при вводе значний и...

17
437 / 144 / 9
Регистрация: 12.01.2009
Сообщений: 678
Записей в блоге: 1
06.08.2009, 10:06
Цитата Сообщение от normres Посмотреть сообщение
По условию в TextBox2 можно вводить только числовые значения от -40 до 40.
Но при комбинации чисел, например -40- или -2- -3-3 3-2- выдается ошибка
Как сделать, чтобы минус вводился только спереди числа и негде больше?
А вариант пробежаться по всем введённым символам и проверить что это цифры чем не подходит?
0
134 / 79 / 6
Регистрация: 06.04.2009
Сообщений: 192
06.08.2009, 10:21
Перед проверкой диапазона вводимых значений необходимо вставить проверку, является ли введённый текст числовым значением. Если не возникает код ошибки - прога работает дальше. Если ошибка - MsgBox.
0
437 / 144 / 9
Регистрация: 12.01.2009
Сообщений: 678
Записей в блоге: 1
06.08.2009, 10:24
Я придумал вот так, хотя может у кого возникнут лучшие идеи.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub TextBox2_Change()
TextBox2.ForeColor = &H80000012
If TextBox2 = "" Then Exit Sub
If TextBox2 = "-" Then Exit Sub
If TextBox2 = "--" Or TextBox2 = "---" Then TextBox2 = "-": Exit Sub
i = 2
Do While Mid(TextBox2.Text, i, 1) <> Empty
    If Mid(TextBox2.Text, i, 2) = "-" Then MsgBox ("Ââåäèòå ÷èñëî")
    i = i + 1
Loop
X = TextBox2 * 1
If X * 1 > 40 Or X * 1 < -40 Then TextBox2 = "": MsgBox _
"Äîïóñòèìûå çíà÷åíèÿ òåìïåðàòóðû òîïëèâà  îò -40 ãð.Ñ  äî 40 ãð.Ñ", vbInformation, "Çàïðåò ââîäà"
If X * 1 > 0 Then TextBox2.ForeColor = &HFF&
If X * 1 < 0 Then TextBox2.ForeColor = &HFF0000
End Sub
0
134 / 79 / 6
Регистрация: 06.04.2009
Сообщений: 192
06.08.2009, 11:42
Не надо таких сложностей, analyst! Если юзер этой проги не станет первым знаком (не считая минуса) вместо числа вводить другие символы, то достаточно заменить
Visual Basic
1
X = TextBox2 * 1
на
Visual Basic
1
X = Val(TextBox2)
И всё работает!
1
437 / 144 / 9
Регистрация: 12.01.2009
Сообщений: 678
Записей в блоге: 1
06.08.2009, 12:13
Цитата Сообщение от yaser Посмотреть сообщение
Не надо таких сложностей, analyst! Если юзер этой проги не станет первым знаком (не считая минуса) вместо числа вводить другие символы, то достаточно заменить
Visual Basic
1
X = TextBox2 * 1
на
Visual Basic
1
X = Val(TextBox2)
И всё работает!
Что-то не очень работает, когда вводишь "6-"?)
0
134 / 79 / 6
Регистрация: 06.04.2009
Сообщений: 192
06.08.2009, 16:38
analyst, проверил твоё замечание, проблемы не нашёл. Переменной Х всё равно присваивается 6. А как отображается инфа на экране - другой вопрос, требуется доп. обработка, если есть необходимость в красоте. Я так понимаю, главное, чтобы прога не глючила при неправильном вводе?
0
437 / 144 / 9
Регистрация: 12.01.2009
Сообщений: 678
Записей в блоге: 1
06.08.2009, 17:14
Цитата Сообщение от yaser Посмотреть сообщение
analyst, проверил твоё замечание, проблемы не нашёл. Переменной Х всё равно присваивается 6. А как отображается инфа на экране - другой вопрос, требуется доп. обработка, если есть необходимость в красоте. Я так понимаю, главное, чтобы прога не глючила при неправильном вводе?
Тут конечно автор вопроса решает как должно быть, но по моему это как-то странновато!)
0
 Аватар для Toxa33rus
3921 / 922 / 125
Регистрация: 16.04.2009
Сообщений: 1,966
06.08.2009, 19:45
Не ссорьтесь.
Visual Basic
1
2
3
4
5
6
7
8
Private Sub Text1_KeyPress(KeyAscii As Integer)
If InStr("0123456789-", Chr(KeyAscii)) <> 0 Or KeyAscii = 8 Then
  If Chr(KeyAscii) = "-" And Len(Text1) <> 0 Then KeyAscii = 0: Text1 = Val(Text1) * -1
  If Chr(KeyAscii) = "0" And (Text1.SelStart = 0 Or Text1.SelStart = 1 And Val(Text1) < 0) Then KeyAscii = 0
Else
  KeyAscii = 0
End If
End Sub
Позволяет вводить только целые числа (положит. и отриц.) непосредственно в само текстовое поле. Код писал давно и все тонкости забыл но по первому взгляду "минус" можно жать в любой момент и (о чудо!) число становится отрицательным (например вводим "123-456" а получаем "-123456").

Единственный косяк: копи/паст
0
0 / 0 / 0
Регистрация: 02.08.2009
Сообщений: 50
06.08.2009, 23:11  [ТС]
Тут конечно автор вопроса решает как должно быть, но по моему это как-то странновато!)
Проще говоря, в TextBox вводятся числовые значения, от -40 и до 40 и больше ни каких вариантов не должно быть. Это значения температуры. Если пользователь вводит только минус, то можно при наведении на кнопку (которая выполняет дальнейшие действия с показаниями), его удалять.
Мне кажется условие понятно. Только как его в коде прописать.
0
437 / 144 / 9
Регистрация: 12.01.2009
Сообщений: 678
Записей в блоге: 1
07.08.2009, 10:18
Цитата Сообщение от normres Посмотреть сообщение
Проще говоря, в TextBox вводятся числовые значения, от -40 и до 40 и больше ни каких вариантов не должно быть. Это значения температуры. Если пользователь вводит только минус, то можно при наведении на кнопку (которая выполняет дальнейшие действия с показаниями), его удалять.
Мне кажется условие понятно. Только как его в коде прописать.
А мне не совсем понятно!) Если пользователь вводит "5-" ,то что должно происходить?
0
134 / 79 / 6
Регистрация: 06.04.2009
Сообщений: 192
07.08.2009, 15:26
Visual Basic
1
2
3
4
5
6
7
Private Sub CommandButton1_Click()
If TextBox2.Text <> "-" And TextBox2.Text <> "" Then
   UserForm1.Hide
   ' Дальнейшая работа
Else: TextBox2.Text = ""
End If
End Sub
0
0 / 0 / 0
Регистрация: 02.08.2009
Сообщений: 50
07.08.2009, 15:35  [ТС]
А мне не совсем понятно!) Если пользователь вводит "5-" ,то что должно происходить?
Да хоть что очищение, сброс.
0
 Аватар для Abu
1161 / 288 / 23
Регистрация: 28.09.2008
Сообщений: 553
07.08.2009, 17:40
Код не претендует на гениальность, но вроде пашет.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Private Function testValue(ByVal myKey As Integer, myText As String) As Integer
If ((myKey = 45) And (Len(myText) = 0)) Or (InStr("0123456789", Chr(myKey)) > 0) _
Then testValue = myKey
End Function
 
Private Function myValue(myStr As String, ByVal myVal As Integer) As Double
myValue = Val(myStr & Chr(myVal))
End Function
 
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim tempValue As Long
KeyAscii = testValue(KeyAscii, TextBox2.text)
tempValue = myValue(TextBox2.text, KeyAscii)
If (tempValue < -40) Or (tempValue > 40) Then KeyAscii = 0
End Sub
 
Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = testValue(KeyAscii, TextBox3.text)
If Left(TextBox3.text, 1) = "-" Then
    TextBox3.MaxLength = 6
Else
    TextBox3.MaxLength = 5
End If
End Sub
 
Private Sub TextBox4_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = testValue(KeyAscii, TextBox4.text)
If (Val(TextBox3.text) = myValue(TextBox4.text, KeyAscii)) Or _
(Val(TextBox3.text) + 1 = myValue(TextBox4.text, KeyAscii)) Then KeyAscii = 0
End Sub
0
 Аватар для Toxa33rus
3921 / 922 / 125
Регистрация: 16.04.2009
Сообщений: 1,966
07.08.2009, 19:36
Abu, хорошо бы еще добавить в testValue возможным вводить KeyAscii = 8 (это backspace - чтоб стирать ошибочную цифру)
1
 Аватар для Abu
1161 / 288 / 23
Регистрация: 28.09.2008
Сообщений: 553
08.08.2009, 11:02
Цитата Сообщение от Toxa33rus Посмотреть сообщение
Abu, хорошо бы еще добавить в testValue возможным вводить KeyAscii = 8 (это backspace - чтоб стирать ошибочную цифру)
У меня (Office 2003 SP3) стирает и так, без явного разрешения ввода backspaca. У тебя разве нет?
0
 Аватар для Toxa33rus
3921 / 922 / 125
Регистрация: 16.04.2009
Сообщений: 1,966
08.08.2009, 15:15
значит это Del
но кто-то из них точно не хочет
0
 Аватар для Abu
1161 / 288 / 23
Регистрация: 28.09.2008
Сообщений: 553
09.08.2009, 10:16
И с Del-ом всё в порядке. Del вообще специальная клавиша и KeyPress-ом не перехватывается. Ты видимо путаешь с vb, там да - нужно явно указывать backspace, а в vba и так работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.08.2009, 10:16
Помогаю со студенческими работами здесь

Массив записей: при вводе значений для множества окружностей выводит лишь один параметр одной
program lab9; const nmax=10; type TPoint=record x,y:real; end; ...

Проверка данных (тип список), список возможных вариантов при вводе вручную
Можно ли в инструменте Проверка данных (при типе данных &quot;Список&quot;) выводить список возможных значений при вводе вручную? Например, если...

Прозрачный textbox при вводе
собственно вопрос в заголовке, как сделать прозрачный textbox при вводе

Сформулировать условие на значение при вводе данных в форму
Форумчане,доброго времени суток! Подскажите, пожалуйста, как сформулировать условие на значение при вводе данных в форму: Данные...

Условие на значение при вводе даты выдачи паспорта
Добрый день! Помогите с такой проблемой. На форме есть 2 поля --Дата рождения(Датарождения) --Дата выдачи паспорта(ДатаПасп). ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru