закрытие окна через строку "меню"

  • Автор темы Alex77777
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

Alex77777

#1
при нажатии на крестик закрытия окна этот код работает
Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Dim kAs Integer
k = MsgBox("Вы хотите выйти из программы?", _
vbQuestion + vbOKCancel + vbDefaultButton2, "сообщение")

If k = vbOK Then
Dim z As Integer
z = MsgBox("Подтвердите выход", _
vbExclamation + vbYesNo + vbDefaultButton2, "сообщение")
If z = vbYes Then
Else
Cancel = 1
End If
Else
Cancel = 1
End If
End Sub

когда в строке меню выбираю соответствующую позицию "Exit" и пишу вот такой код

Dim kAs Integer
k = MsgBox("Вы хотите выйти из программы?", _
vbQuestion + vbOKCancel + vbDefaultButton2, "Системное сообщение")

If k = vbOK Then
Dim z As Integer
z = MsgBox("Подтвердите выход", _
vbExclamation + vbYesNo + vbDefaultButton2, "Системное сообщение")
If z = vbYes Then
Unload Me
End If
End If

о при нажатии позиции "Exit" появляется первое сообщение "Вы хотите выйти из программы?", далее при нажатии vbOK появляется сообщение "Подтвердите выход", потом когда нажимаю vbYes (должна выгрузиться форма, но этого не происходит) снова появляется сообщение "Вы хотите выйти из программы?" я опять нажимаю vbOK, затем опять появляется сообщение "Подтвердите выход", и только затем нажав снова vbYes форма выгружается.
т.е. у меня почему то каждое сообщение повторяется дважды, а мне нужно только по одному разу с последующим закрытием формы. получается, что Unload Me срабатывает только со второго раза.

коллеги по работе посоветовали использовать оператор GoTo, но с ним такая же "петрушка".

кто знает подскажите что у меня неправильно в коде.
 
T

Tanya

#2
Все очень просто

Событие MDIForm_QueryUnload возникает каждый раз когда в программе пишется Unload Form1
или Unload Me, нажимается на крестик (Закрытие окна) в общем при выгрузке формы.

У тебя: сначала нажимаем Exit - следует обработка события меню,
где ты спрашиваешь "Вы хотите выйти из программы?"
отвечаем Yes и Yes на следующий вопрос
и переходим к Unload Me, который вызывает событие MDIForm_QueryUnload
и вопросы повторяются вновь но уже из обработчика MDIForm_QueryUnload

Выход следующий: в обработчике меню пишешь только Unload Me
 
A

Alex77777

#3
Огромное спасибо ! ! !
а ведь хотел методом "тыка" написать просто Unload Me, но я думал, что форма выгрузится без всяких сообщений. А оказывается все работает как и при нажатии на крестик закрытия формы.
Теперь все работает как и хотелось :blink:
 
Статус
Закрыто для дальнейших ответов.