powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / InputBox = действие при нажатии кнопки отмена
39 сообщений из 39, показаны все 2 страниц
InputBox = действие при нажатии кнопки отмена
    #39714972
assei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята подскажите, не могу понять почему у меня не происходит действие при нажатии кнопки "отмена" в InputBox, выдает ошибку, что не так делаю?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Dim ans As String
 Dim d1, d2
  If TextBox2.Text = "" Then
   MsgBox "сообщение!", 48, "Информация"
Else
 ans = InputBox("сообщение:", "информация", 0)
  d1 = TextBox2
   d2 = ans - TextBox2.Text
    MsgBox "сообщение: " & d2 , 64, "информация"

[color=red]If StrPtr(ans) <> 0 Then 'когда нажата кнопка отмена 
Exit Sub[/color]

End If
End If
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39714979
assei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
оу у меня получилось
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39715410
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asseiоу у меня получилось
Решение скинь, что бы другие пользователи с такой ошибкой знали ответ
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39715432
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InputBox всегда возвращает String. Если нажата кнопка отмены - возвращается пустая строка. Посему и надо тупо сравнивать результат с ней (If ans = "" Then), а не маяться непонятно чем с указателем.
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39715452
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaПосему и надо тупо сравнивать результат с ней (If ans = "" Then)Тут палка о двух концах. Если в InputBox ничего не ввели и нажали ОК - будет пустая строка и так же пустая строка будет если нажать Отмена. Но обрабатывать в нормальных приложениях хочется таким образом, чтобы отделять нажатие кнопки Отмена от нажатия Ок и пустом поле, т.к. при Отмена не надо ничего показывать(типа - необходимо ввести данных), а при нажатии Ок все же чаще всего требуется.
Поэтому и применяется StrPtr, чтобы определить был ли указатель(после нажатия Ок он создается) или не был(если нажали Отмена).
По факту решение-то уже приведено выше, но несколько неверно, т.к указан знак неравенства, когда должно быть наоборот. Я в этой статье разбирал подобный момент: Работа с диалогами
По идее код должен быть такой:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Dim vRetVal
vRetVal = InputBox("Укажите номер столбца для удаления(целое число):", "Запрос данных", "")
    
If StrPtr(vRetVal) = 0 Then
    MsgBox "Нажата кнопка Отмена. Процедура прервана", vbCritical, "DelCols"
    Exit Sub
End If
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39715464
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да тут, собственно, ошибка в том, что ТС решил проверить что возвращает InputBox почему-то в конце, после того, как он уже попытался использовать значение из ans - там и возникала ошибка, так как ТС вообще не использует преобразование типов.
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39715471
assei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist, у меня получается так! но вот только при отмене выпадает сообщение_1 потом сообщение_2:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
If Password = "1" Then
    Form2.Show
ElseIf Password <> 0 Then
    MsgBox "пароль не верный", vbInformation, "сообщение" ' сообщение_1
        Unload Form2 'выгрузка формы
If StrPtr(Password) = 0 Then MsgBox "Нажата кнопка Отмена. Процедура прервана", vbInformation, "сообщение" 'сообщение_2
Exit Sub
If Password = "911" Then
    MsgBox "сообщение важно!",  vbCritical, "сообщение"
            Me.Hide
                Unload Me

End
End If
End If
End If
End Sub
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39715478
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asseiно вот только при отмене выпадает сообщение_1 потом сообщение_2:А почему, собственно, не должно выдаваться сообщение_1? Условие-то соблюдается для сообщения: Password <> 0
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39715483
assei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, вы извините может моя последовательность покажется вам странной, но как я думаю
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
....
ElseIf Password <> 0 Then 'здесь сравниваем верен ли пароль
    MsgBox "пароль не верный", vbInformation, "сообщение" ' сообщение_1

If StrPtr(Password) = 0 Then MsgBox ' а здесь нажата кнопка отмена независимо от правильности ввода
MsgBox "Нажата кнопка Отмена. Процедура прервана", vbInformation, "сообщение" 'сообщение_2
....
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39715485
assei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, хотя попробовал и так ни чего не изменилось
Код: vbnet
1.
2.
3.
'ElseIf Password <> 0 Then '-убрал

    Else ' вписал
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39715497
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assei
Код: vbnet
1.
'здесь сравниваем верен ли пароль

Вот именно. Но нажатие кнопки "Отмена" в диалоге не отменяет указанную проверку, так? Проверка срабатывает и выдается сообщение, что пароль не верен. А уже ПОТОМ проверяется, а не была ли случайно нажата кнопка "Отмена".
Очевидно, что нужно сначала проверять нажатие "Отмена", а уже потом пытаться использовать введенное значение.
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39715505
assei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, проверенно работает:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
...
Dim Password
Password = InputBox("ввод в поле пароль:", "Сообщение, "*")
If StrPtr(Password) = 0 Then
    MsgBox "Нажата кнопка Отмена. Процедура прервана", vbInformation, "сообщение"
        Unload Form2 
ElseIf Password = "1" Then
    Form2.Show
Else
    MsgBox "пароль не верный", vbInformation, "сообщение"
        Unload Form2 
End If
    If Password = "911" Then
        MsgBox "сообщение ВАЖНО!, "СООБЩЕНИЕ", vbCritical, 48
Exit Sub
End If
...
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39715577
assei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, Ребята! во всем этом у меня небольшая загвоздка: после того как нажата кнопка "ок" а пароль неправильный!
строка должна возвратить "Form2" а получаю ошибку
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Dim Password
Password = InputBox("ввод в поле пароль:", "Сообщение, "*")
If StrPtr(Password) = 0 Then
    MsgBox "Нажата кнопка Отмена. Процедура прервана", vbInformation, "сообщение"
        Unload Form2 
ElseIf Password = "1" Then
    Form2.Show
Else
    Unload Form2
        MsgBox "пароль не верный", vbInformation, "сообщение"
           Form2.Show
End If
    If Password = "911" Then
        MsgBox "сообщение ВАЖНО!, "СООБЩЕНИЕ", vbCritical, 48
Exit Sub
End If
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39715587
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Unload Form2
Form2.Show
Вы выгружаете форму, а потом пытаетесь её закрыть? при это выгружаете 2 раза, это нормально?
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39715590
assei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes, Да но потом я ее пытаюсь открыть, что бы кнопкой "отмена" закрыть
Unload Form2
Form2.Show
а получается что, сразу могу выйти и закрыть форму А через кнопку "Ок" - потом "отмена" не могу закрыть форму, форма же открыта!
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39715782
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assei,

позвольте уточнить - весь этот код, я так полагаю - тоже в Form2?
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39715936
assei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist, да верно Form2
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39715949
assei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist, мне наверное следовало бы пояснить с формой2, я это делаю для того чтобы импутбокс после сообщений не закрывался а оставался на глазах пользователя, вот я и вызываю форму2
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39716371
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asseiя и вызываю форму2Ага. Притом Вы её вызываете в продцедуре её же загрузке, далее из неё её же выгружаете и в НЕЙ же её же вызываете.
Это бред. От слова - ПОЛНЫЙ.
Пока код выполняется внутри формы она по определению находится еще в памяти и не может быть полностью выгружена.
Используйте Hide вместо Unload, если уж так надо формул скрыть от пользователя. А еще лучше логику кода пересмотрите, чтобы не пришлось фигней лишней заниматься.
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39716516
assei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подскажите почему при вставке кода в окно ответа, все русские буквы имеют неправильный вид
MsgBox "Ïîëå ïàðîëÿ èìååò çíà÷åíèå ÏÓÑÒÎ, ïîâòîðèòå ââîä ïàðîëÿ!"
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39716773
assei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist, мне подсказали и вот что у меня получилось НО в строке "ElseIf Password <> "" Then 'проверка поля на наличие значения": не возвращается окно импутбокс, а закрывает программу.

Код: vbnet
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.
Static Password As String
 
If App.PrevInstance = True Then
    MsgBox "Программа уже загружена", 16, "Ошибка пользователя!"
End
End If
Do
If Password = "" Then
    Password = InputBox("Доступ к программе осуществляется по паролю:", "Сообщение")
End If
If StrPtr(Password) = 0 Then 'если нажата кнопка отмена
       MsgBox "Нажата кнопка Отмена. Процедура прервана", 48, "Сообщение"
            Unload Form2
Exit Do
    ElseIf Password = "1" Then 'проверка правильного значения
        Form2.Show
Exit Do
    ElseIf Password = "911" Then
        MsgBox ", ПОЗДРАВЛЯЕМ!", 16, "Важная информация"
            Me.Hide
                Unload Me
 
Exit Do
    ElseIf Password <> "" Then 'проверка поля на наличие значения
    MsgBox "Пароль" & " - " & Password & " - " & ", НЕ ВЕРНЫЙ, введите правильный пароль или" & vbCrLf & _
        "нажмите кнопку ОТМЕНА и покиньте программу!", 64, "Сообщение"
            Unload Form2
Exit Do
    Else
        MsgBox "Поле пароля имеет значение ПУСТО, повторите ввод пароля!или" & vbCrLf & _
        "нажмите кнопку ОТМЕНА и покиньте программу!", 64, "Сообщение"
    End If
        Loop
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39716792
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asseiне возвращается окно импутбокс, а почему должно? Inputbox появляется только когда Password = ""
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39716834
assei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, что то не получается
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39716836
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Освой пошаговую отладку программы.

А еще желательно - правильное использование отступов при оформлении кода программы - будет проще видеть проблемы.
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39716839
assei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, все получилось! , я понял stop + F8
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39716864
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asseiподскажите почему при вставке кода в окно ответа, все русские буквы имеют неправильный вид
MsgBox "Ïîëå ïàðîëÿ èìååò çíà÷åíèå ÏÓÑÒÎ, ïîâòîðèòå ââîä ïàðîëÿ!"
Патамучта копировал при включенной англ раскладке:))
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39716962
assei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Serg197311, сАпАсибА
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39717403
assei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Serg197311, подскажите почему в моем коде второй и последующие введенные Неправильные пароли открывают доступ к программе?:
Код: vbnet
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.
If App.PrevInstance = True Then
    MsgBox "Программа уже загружена", 16, "Ошибка пользователя!"
End
End If
Do
If Password = "" Then
    Password = InputBox("Доступ к программе осуществляется по паролю:", "Сообщение")
End If
If StrPtr(Password) = 0 Then 'если нажата кнопка отмена
       MsgBox "Нажата кнопка Отмена. Процедура прервана", 48, "Сообщение"
            Unload Form2
Exit Do
    ElseIf Password = "1" Then 'проверка правильного значения
        Form2.Show
Exit Do
ElseIf Password = "911" Then
        MsgBox "ВЫ ВВЕЛИ КОД ДЛЯ УНИЧТОЖЕНИЯ ПРОГРАММЫ, ПОЗДРАВЛЯЕМ!", 16, "Важная информация"
            Me.Hide
                Unload Me
                    Call delet
Exit Do
   ElseIf Password <> "" Then 'проверка поля на наличие значения
    MsgBox "Пароль" & " - " & Password & " - " & ", НЕ ВЕРНЫЙ, введите правильный пароль или" & vbCrLf & _
        "нажмите кнопку ОТМЕНА и покиньте программу!", 64, "Сообщение"
       
            Password = InputBox("Доступ к программе осуществляется по паролю:", "Сообщение")

Exit Do
 Else
        MsgBox "Поле пароля имеет значение ПУСТО, повторите ввод пароля!или" & vbCrLf & _
        "нажмите кнопку ОТМЕНА и покиньте программу!", 64, "Сообщение"
    End If
 
        Loop
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39717411
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asseiSerg197311, подскажите почему
Если честно - я попутался в Ваших elseif....
Я бы эту конструкцию на select case собрал бы.
А цикл там зачем?
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39717428
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А переменную Password кто к исходному виду ("") приводить будет после проверки?
Запускайте дебаггер и просматривайте значения переменных в процессе выполнения цикла. Сразу все станет ясно.
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39717651
assei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Serg197311, я попробовал с select case у меня не получается
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39717905
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не получается именно потому, что не можете правильно алгоритм построить

0) ввод пароля через inputbox
1) проверка не нажата ли кнопка отмены?If StrPtr(Password) = 0 (я кстати не пользовался такой конструкцией ни разу - не знаю как работать будет ) - действие
2) проверка не введено ли пустое значение - действие
3)проверка на код уничтожения) - действие
4) только тут проверка на правильность пароля! - если неверный - Password="" и возврат на 0( я бы делал это без цикла - просто GOTO)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
inputbox 
Select case Password
         case is=0

         case is=""

         case is="911"

         case is="1"
         
         case else  ' значит - пароль неправильный

end select


А в общем еще бы и на Null проверить надо, если не обьявлен тип переменной string
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39717909
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще - и проверки
Код: vbnet
1.
2.
3.
case is=0

         case is=""


можно убрать.
в case else сообщить - введен неверный пароль и все. Не стоит усложнять.....
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39717922
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Select case True
         case StrPtr(Password) = 0

         case Password=""

         case Password="911"

         case Password="1"
         
         case Password <> ""

end select
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39717936
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist,
Каюсь - синтаксис из VBa притащил((((
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39717952
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311,

в VBA и VB это работает одинаково, кстати :)
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39717992
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist,
Ну тогда значит и мой вариант сработать должен
у меня в Аксе - работает:)
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39717995
assei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist, Ребята а кстати такой момент интересный, что если ввести второй раз неправильный пароль программа откроет доступ, так же если при пустом поле два раза нажать "ок" так же откроет доступ, как это можно устранить?
...
Рейтинг: 0 / 0
InputBox = действие при нажатии кнопки отмена
    #39718022
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assei,
21703911
вот это еще раз прочитать
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / InputBox = действие при нажатии кнопки отмена
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]