Bonjour, voici mon code pour vous expliquer le contexte
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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
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 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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![]()
Partager