Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.79/106: Рейтинг темы: голосов - 106, средняя оценка - 4.79
 Аватар для parkito
15 / 14 / 10
Регистрация: 22.03.2010
Сообщений: 695

Как запрограммировать Кнопку отмены в inputbox

17.07.2010, 16:05. Показов 20437. Ответов 26
Метки нет (Все метки)

Вот написал программу но у нее есть один недостаток когда пользователь нажимает Cancel В исполняющимся inputBox , то вместо того чтобы завершиться (или перейти на предыдущий шаг) программа выполняет следующий ! Что можно сделать чтоб при нажатии прога или закрывалась или переходила на предыдущий шаг???
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
31
32
33
34
35
36
37
38
39
40
41
Dim vrt1, vrt2, vrt3, vrt4, vrt5, vrt6, vrt7, vrt8, vrt9, vrt10, vrt11, vrt12 As Variant
Private Sub Command1_Click()
vrt1 = InputBox("Введите ваши ФИО:", "Регестрация")
 
vrt2 = MsgBox("Уважаемый(ая)" + vrt1 + "вы готовы к проверке знаний ? ", 32 + 4, "Конец регестрации")
If vrt2 = 7 Then End
vrt3 = MsgBox("Уважаемый(ая)" + vrt1 + "Взможно вы неправельно ввели свои ФИО ! Если вы ввели правильно намите OK, если вы допустили ошибку нажмите ОТМЕНА:", 48 + 1, "Уточнение данных")
If vrt3 = 2 Then
 
 
 
 
vrt4 = InputBox("Заново введите ваши ФИО:", "Повторная регестрация")
If vrt4 = 7 Then End
vrt5 = MsgBox("Уважаемый(ая)" + vrt4 + "вы готовы к проверке знаний ?", 32 + 4, "Конец регестрации")
 
vrt6 = InputBox("Сколько бит в одном байте ?", "Вопрос №1")
If vrt6 = "8" Then vrt7 = MsgBox("Правильно", 0, "Ура"): vrt8 = vrt8 + 1 _
Else: vrt7 = MsgBox("Неправильно:", 0, "Ой"): vrt9 = vrt9 + 1
vrt10 = InputBox("Может ли картинка быть инфецированна вирусом ?:", "Вопрос №2")
If vrt10 = "да" Then vrt7 = MsgBox("Правильно", 0, "Ура"): vrt8 = vrt8 + 1 _
Else: vrt11 = MsgBox("Неправильно", 0, "Ой"): vrt9 = vrt9 + 1
MsgBox "Уважаемый(ая) " + vrt1 + "пройдя тест вы сделали " + Str(vrt9) + " ошибок и дали " + Str(vrt8) + " правельных ответов", 0, "Конец"
 
 
 
 
Else: vrt6 = InputBox("Сколько бит в одном байте ?:", "Вопрос №1")
If vrt6 = "8" Then vrt7 = MsgBox("Правильно", 0, "Ура"): vrt8 = vrt8 + 1 _
Else: vrt7 = MsgBox("Неправильно:", 0, "Ой"): vrt9 = vrt9 + 1
vrt10 = InputBox("Может ли картинка быть инфецированна вирусом ?:", "Вопрос №2")
If vrt10 = "да" Then vrt7 = MsgBox("Правильно", 0, "Ура"): vrt8 = vrt8 + 1 _
Else: vrt11 = MsgBox("Неправильно:", 0, "Ой"): vrt9 = vrt9 + 1
MsgBox "Уважаемый(ая) " + vrt1 + "пройдя тест вы сделали " + Str(vrt9) + " ошибок и дали " + Str(vrt8) + " правельных ответов", 0, "Конец"
End If
End
End Sub
 
Private Sub Command2_Click()
End
End Sub
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.07.2010, 16:05
Ответы с готовыми решениями:

Запрограммировать кнопку "Отмена" в InputBox
Я конечно же чайник, поэтому требуется ваша помощь, дорогие, вот код(извините если коряво): Private Sub Form_Load() Dim d, g As Integer...

Как в VBA сделать кнопку отмены
Доброй ночи ! Очень нужна ваша помощь делаю курсовую по Методам прямоугольников код написан (очень кривой но всё таки код=) Остался...

как написать кнопку для очистки или отмены действий
Не могу написать правильно код для кнопки " очистка". Мне нужно чтобы я вводила оценки, он мне подсчитывал средний бал, после чего я...

26
 Аватар для parkito
15 / 14 / 10
Регистрация: 22.03.2010
Сообщений: 695
17.07.2010, 21:33  [ТС]
Короче вот такая проблема : ближе к зиме в нашем городе проводят научную конференцию Старт в науку. И вот на ней люди блещут своими талантами в различных дисциплинах : математика, физика, литература, экономика, информатика ! Так вот мне нужно будет участвовать в этой конференции в разделе информатика ! В этой дисциплине есть два подраздела это программирование и социальные технологии(соц инженерия проще говоря) . Так вот люди делаю различные проекты от программирования калкульятора на бейзике до создания офисных приложений на более сложных языках ! не посоветуете вы мне что-нибудь? Мои сильные стороны это HTML Visual basic photoshop до конца лето планирую выучить javascript и php ! Посоветуйте плиз ! мож вы чем то подобном участововали ?
0
1181 / 632 / 39
Регистрация: 30.05.2010
Сообщений: 715
17.07.2010, 22:36
Здравствуйте parkito.
Цитата Сообщение от parkito Посмотреть сообщение
Мои сильные стороны это HTML Visual basic..
не могу судить о познаниях в HTML но даже судя по этой теме ("..не слишком понял..") делать подобные заявления о VB я бы не стал.
если Вы планируете участвовать в конференции (и даже если не планируете), хорошим тоном является знание языка (не только языка программирования), в коде присутствует опечатка : "Повторная регистрация".
Но не будем о грустном , "..Посоветуйте.." - Вы создали конструкцию для тестирования, это направление безгранично(!). Развивайте эту тему, создайте полноценное приложение с изменяемым набором вопросов/ответов по темам Вашего образовательного учреждения и победа на конференции гарантирована.
Успехов Вам.
Евгений.
1
 Аватар для Abu
1161 / 288 / 23
Регистрация: 28.09.2008
Сообщений: 553
18.07.2010, 01:46
Прошу прощения, что вклиниваюсь, но
parkito, В том и проблема: никак нельзя отличить Отмену от ввода пустой строки.
Значит действительно, отличить Отмену от ввода пустой строки никак нельзя.
Можно!!!
Вот код:
Visual Basic
1
2
3
4
vrt4 = InputBox("Введите свои ФИО:", "Регестрация")
If (StrPtr(vrt4) <> 0) And (vrt4 = "") Then
    MsgBox "Вы оставили пустое поле", vbCritical + vbOKOnly, "Упс"
End If
В случае пустой строки будет предупреждение, в случае отмены - ничего. Дальше сами настраивайте условие, как удобно, например - выход из процедуры вообще, если пользователь передумал что-то вводить.
P.S.
vbInformation - это константа. Выше у Вас написано 16 + 1, что на самом деле есть vbCritical + vbOkCancel.
Вообще я бы не советовала parkito юзать цифры, точнее Вы можете их юзать когда пишете для себя, если вам так удобней, но когда выкладываете код - лучше всё-таки константы, их же специально для удобства и понимания придумали! vbCritical и vbOKCancel гораздо понятней, чем 1 и 16!
2
 Аватар для parkito
15 / 14 / 10
Регистрация: 22.03.2010
Сообщений: 695
18.07.2010, 11:16  [ТС]
Вообще я бы не советовала parkito юзать цифры, точнее Вы можете их юзать когда пишете для себя, если вам так удобней, но когда выкладываете код - лучше всё-таки константы, их же специально для удобства и понимания придумали! vbCritical и vbOKCancel гораздо понятней, чем 1 и 16!
Я бы с радостью, но по учебнику которому я учусь меня учат цифрами !

Добавлено через 22 минуты
Прежде чем опробовать и вставить код я хочу в нем разобраться ! Что это такое (StrPtr(vrt1) <> 0 ? дальше по коду идет логическое умножение на пустую строку (Если пользователь ее оставит) ! Я маненько переписал код и он стал таким
Visual Basic
1
2
3
4
5
vrt1 = InputBox("ВВедите ваши ФИО:", "Регистрация")
If (StrPtr(vrt1) <> 0) And (vrt1 = "") Then
    MsgBox "Вы оставили пустое поле", vbCritical + vbOKOnly, "упс"
    Else: End
End If
теперь когда я нажимаю отмену происходит выход из программы !!!ура хоть это получилось !!! !!! а если оставляю пустую строку то возникает ошибка которую я написал и программа дальше продолжает выполняться !! Как мне сделать так чтоб она к регистрации возвращалась ??
0
1181 / 632 / 39
Регистрация: 30.05.2010
Сообщений: 715
18.07.2010, 13:26
parkito,
Цитата Сообщение от parkito Посмотреть сообщение
Что это такое (StrPtr(vrt1) <> 0
при нажатии Cancel (Отмена) возвращается vbNullString, при подтверждении ввода возвращается - "" (строка нулевой длины). VB(A) приравнивает эти два значения и потому простыми средствами задача действительно неразрешима.
Но недокументированная функция StrPtr (любезно предоставленная Abu) возвращает указатель памяти в котором размещается результат при подтверждении ввода, соответственно если выбрана Отмена он равен нулю.

Цитата Сообщение от parkito Посмотреть сообщение
...чтоб она к регистрации возвращалась ?
поставьте в коде метку и при условии... возвращаете обработку кода на неё:
Visual Basic
1
2
3
4
5
6
7
8
9
10
....
100
....
Label1:
...
If A = A Then
    Goto 100
ElseIf B = B Then
    Goto Label1
....
Евгений.
1
 Аватар для Abu
1161 / 288 / 23
Регистрация: 28.09.2008
Сообщений: 553
18.07.2010, 14:08
Цитата Сообщение от parkito Посмотреть сообщение
Что это такое (StrPtr(vrt1) <> 0 ?
Про StrPtr можно тпрочитать в документации (ну или просто отгуглить), а если на вскидку, то функция StrPtr возвращает указатель на адрес строки в памяти, т.е. если пользователь жмёт в InputBox-е Ok, то в памяти резервируется место для строки, даже для пустой (если пользователь ничего не ввёл), а если он нажал Cancel, то память под строку не выделяется, и возращаемое значение функции StrPtr будет равно нулю. Примерно как-то так.

End лучше не использовать, ибо он просто грохает программу, в замен ему лучше Unload Me (если нужно программу завершить), или лучше Exit Sub (выход из процедуры).

Цитата Сообщение от parkito Посмотреть сообщение
Как мне сделать так чтоб она к регистрации возвращалась ??
Я бы сделала так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub Command1_Click()
Dim vrt1 As String, ret As Long
'перевенная для получения имени, и переменная для получения указателя указателя
Do While (vrt1 = "")
'цикл, который будет выполняться, пока vrt1 равен пустой строке
    ret = Registration(vrt1)
    'вызываем функцию, чтоб получить указатель на строку и саму строку
    If ret = 0 Then Exit Sub
    'если указатель равен нулю, значит пользователь нажал отмену, выходим из процедуры
Loop
'дальше работаем с полученным vrt1, например
MsgBox vrt1
End Sub
 
Private Function Registration(ByRef FIO As String) As Long
'функция для получения данных от пользователя, которая возвращает указатель на строку
'и передаёт в FIO полученные данные
FIO = InputBox("ВВедите ваши ФИО:", "Регистрация")
'спрашиваем что-то у пользователя
Registration = StrPtr(FIO)
'возвращае6м указатель на строку-ответ
End Function
Чтобы полностью понять код, стоит почитать какую-нибудь справку про передачу аргументов по ссылке и по значению (ByRef и ByVal).

Добавлено через 1 минуту
Блин, не успела...
1
 Аватар для parkito
15 / 14 / 10
Регистрация: 22.03.2010
Сообщений: 695
19.07.2010, 11:08  [ТС]
Спасибо ! Сейчас попробую !
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.07.2010, 11:08

Как запрограммировать кнопку...
Такой вопрос: как запрограммировать кнопку на запуск какого-либо приложения, находящегося на жестком диске? Т.е. запустили нашу программу,...

Как продолжить выполнение скрипта PHP если пользователь нажал кнопку отмены в браузере?
Доброго времени суток. У меня такой вопрос, как продолжить выполнение скрипта PHP если пользователь нажал кнопку отмены в браузере.

Как запрограммировать кнопку cancel в лазарусе на выход?
Доброго времени суток всем! Пишу программу в лазарусе с диалоговыми окнами. И мне нужно, чтобы в окне inputbox при нажатии на кнопку ...

Как запрограммировать кнопку Cancel в MessageBox::Show?
Есть диалоговое окно сообщения. Как запрограмировать кнопку cancel на закритие программи. Вот код: MessageBox::Show(&quot;Логин или...

C++ Threads или как запрограммировать кнопку Старт и Стоп
Погуглил нечего не нашёл на эту тему..


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru