Аватар для parkito
15 / 14 / 10
Регистрация: 22.03.2010
Сообщений: 695

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

17.07.2010, 16:05. Показов 20482. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru