Problème pour quitter mon programme
Bonjour, voici mon code pour vous expliquer le contexte
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Public Sub UnloadForms()
Dim objForm As Form
For Each objForm In Forms
Call Unload(objForm)
Next objForm
End Sub
Public Sub ExitApp()
If Not isQuitApp Or isUnload Then Exit Sub
isUnload = True
Call UnloadForms
If Not cError Is Nothing Then
Set cError = Nothing
End If
If Not cMyAdo Is Nothing Then
Call cMyAdo.CloseMySQL
Set cMyAdo = Nothing
End If
End Sub |
Dans mon programme, j'ai placé l'apelle d'une procédure ExitApp dans les Form_QueryUnload() de chacune de mes forms
il arrive parfois que je dois décharger une form, mais sans quitter le programme, c'est pourquoi j'ai une variable boolean public appelé isQuitApp que je met à false lorsque je veux décharger une form sans quitter le programme.
Dans mon form principal j'y ait placé le code suivant pour pouvoir appeler un autre form qui demande si on est sûr de quitter le programme ou non.
Code:
1 2 3 4 5 6
| Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If isQuitApp And Not frmQuit.isQuit Then
Cancel = 1
Call frmQuit.Show(vbModal)
End If
End Sub |
Dans la form frmQuit j'ai une variable public isQuit qui indique si on a appuyé sur le bouton Oui ou Non pour confirmer si on veut vraiment quitter.
Mais je suis obligé jusqu'ici de mettre ce code dans Form_Activate() car si je le place dans le Form_QueryUnload() vb6 plante, car en revenant du form frmQuit le form principal redevient actif et c'est Form_Activate qui se déclenche et en le mettant dans le QueryUnload du frmQuit ça plante aussi, car UnloadAllForms est exécuté alors que la fenêtre modale frmQuit est toujours là et n'est pas terminé encore quand c'est au tour de frmMain de disparaitre
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Private Sub Form_Activate()
If frmQuit.isQuit Then
Call Logoff(utUserInfos.sUserId, "User logoff")
If cError.lErrNum <> 0 Then
Call cError.ShowError
Exit Sub
End If
Call ExitApp
Else
' code nécessaire pour le form principal dans activate
' mais même en le supprimant, une erreur se produit quand même..
If lMenu = -1 Then Call lstMenu.ClickOn(0)
Call RefreshAll
If cError.lErrNum <> 0 Then
Call cError.ShowError
End If
End If
End Sub |
Remarquez que comme c'est en ce moment, ça fonctionne très bien, cependant, je ne trouves pas cela très propre de mettre ça dans Form_Activate, est-ce qu'il y aurait moyen de faire autrement ?
Je places toujours ExitApp() dans les Form_QueryUnload() car ainsi je suis sûr que peu importe comment la form se ferme, soit en cliquant le bouton quitter, ou X, etc que la procédure ExitApp() va être déclenché..
Merci pour vos conseils :)