Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / InputBox = действие при нажатии кнопки отмена / 25 сообщений из 39, страница 1 из 2
09.10.2018, 15:29
    #39714972
assei
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
Ребята подскажите, не могу понять почему у меня не происходит действие при нажатии кнопки "отмена" в 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
09.10.2018, 15:36
    #39714979
assei
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
оу у меня получилось
...
Рейтинг: 0 / 0
10.10.2018, 10:29
    #39715410
Focha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
asseiоу у меня получилось
Решение скинь, что бы другие пользователи с такой ошибкой знали ответ
...
Рейтинг: 0 / 0
10.10.2018, 10:53
    #39715432
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
InputBox всегда возвращает String. Если нажата кнопка отмены - возвращается пустая строка. Посему и надо тупо сравнивать результат с ней (If ans = "" Then), а не маяться непонятно чем с указателем.
...
Рейтинг: 0 / 0
10.10.2018, 11:22
    #39715452
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
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
10.10.2018, 11:36
    #39715464
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
Да тут, собственно, ошибка в том, что ТС решил проверить что возвращает InputBox почему-то в конце, после того, как он уже попытался использовать значение из ans - там и возникала ошибка, так как ТС вообще не использует преобразование типов.
...
Рейтинг: 0 / 0
10.10.2018, 11:47
    #39715471
assei
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
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
10.10.2018, 11:50
    #39715478
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
asseiно вот только при отмене выпадает сообщение_1 потом сообщение_2:А почему, собственно, не должно выдаваться сообщение_1? Условие-то соблюдается для сообщения: Password <> 0
...
Рейтинг: 0 / 0
10.10.2018, 11:59
    #39715483
assei
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
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
10.10.2018, 12:02
    #39715485
assei
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
Shocker.Pro, хотя попробовал и так ни чего не изменилось
Код: vbnet
1.
2.
3.
'ElseIf Password <> 0 Then '-убрал

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

Вот именно. Но нажатие кнопки "Отмена" в диалоге не отменяет указанную проверку, так? Проверка срабатывает и выдается сообщение, что пароль не верен. А уже ПОТОМ проверяется, а не была ли случайно нажата кнопка "Отмена".
Очевидно, что нужно сначала проверять нажатие "Отмена", а уже потом пытаться использовать введенное значение.
...
Рейтинг: 0 / 0
10.10.2018, 12:35
    #39715505
assei
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
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
10.10.2018, 14:22
    #39715577
assei
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
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
10.10.2018, 14:42
    #39715587
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
Unload Form2
Form2.Show
Вы выгружаете форму, а потом пытаетесь её закрыть? при это выгружаете 2 раза, это нормально?
...
Рейтинг: 0 / 0
10.10.2018, 14:45
    #39715590
assei
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
Roman Mejtes, Да но потом я ее пытаюсь открыть, что бы кнопкой "отмена" закрыть
Unload Form2
Form2.Show
а получается что, сразу могу выйти и закрыть форму А через кнопку "Ок" - потом "отмена" не могу закрыть форму, форма же открыта!
...
Рейтинг: 0 / 0
10.10.2018, 20:34
    #39715782
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
assei,

позвольте уточнить - весь этот код, я так полагаю - тоже в Form2?
...
Рейтинг: 0 / 0
11.10.2018, 10:04
    #39715936
assei
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
The_Prist, да верно Form2
...
Рейтинг: 0 / 0
11.10.2018, 10:22
    #39715949
assei
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
The_Prist, мне наверное следовало бы пояснить с формой2, я это делаю для того чтобы импутбокс после сообщений не закрывался а оставался на глазах пользователя, вот я и вызываю форму2
...
Рейтинг: 0 / 0
11.10.2018, 21:05
    #39716371
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
asseiя и вызываю форму2Ага. Притом Вы её вызываете в продцедуре её же загрузке, далее из неё её же выгружаете и в НЕЙ же её же вызываете.
Это бред. От слова - ПОЛНЫЙ.
Пока код выполняется внутри формы она по определению находится еще в памяти и не может быть полностью выгружена.
Используйте Hide вместо Unload, если уж так надо формул скрыть от пользователя. А еще лучше логику кода пересмотрите, чтобы не пришлось фигней лишней заниматься.
...
Рейтинг: 0 / 0
12.10.2018, 10:12
    #39716516
assei
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
подскажите почему при вставке кода в окно ответа, все русские буквы имеют неправильный вид
MsgBox "Ïîëå ïàðîëÿ èìååò çíà÷åíèå ÏÓÑÒÎ, ïîâòîðèòå ââîä ïàðîëÿ!"
...
Рейтинг: 0 / 0
12.10.2018, 15:42
    #39716773
assei
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
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
12.10.2018, 16:02
    #39716792
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
asseiне возвращается окно импутбокс, а почему должно? Inputbox появляется только когда Password = ""
...
Рейтинг: 0 / 0
12.10.2018, 17:34
    #39716834
assei
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
Shocker.Pro, что то не получается
...
Рейтинг: 0 / 0
12.10.2018, 17:35
    #39716836
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
Освой пошаговую отладку программы.

А еще желательно - правильное использование отступов при оформлении кода программы - будет проще видеть проблемы.
...
Рейтинг: 0 / 0
12.10.2018, 17:40
    #39716839
assei
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
InputBox = действие при нажатии кнопки отмена
Shocker.Pro, все получилось! , я понял stop + F8
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / InputBox = действие при нажатии кнопки отмена / 25 сообщений из 39, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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