Comment faire dans la méthode Form_Close() pour annuler la fermeture du formulaire? (Qui a été faite par un Docmd.Close ou en cliquant sur le petit "X")
Comment faire dans la méthode Form_Close() pour annuler la fermeture du formulaire? (Qui a été faite par un Docmd.Close ou en cliquant sur le petit "X")
Evénement sur libération (Form_Unload(Cancel As Integer))
Code : Sélectionner tout - Visualiser dans une fenêtre à part Cancel = true 'Annule la fermeture
Bonjour,
Il est possible d'annuler la fermeture d'un formulaire en passant par l'évènement "sur libération".
Cette instruction sera appelée directement si tu cliques sur la croix. Par contre, si tu tentes de sortir avec un DoCmd.Close, une erreur se produit. Il conviendra donc d'intercepter l'erreur comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Private Sub Form_Unload(Cancel As Integer) If MsgBox("Voulez-vous vraiment sortir?", vbYesNo) = vbNo Then Cancel = True End If End Sub
Bon courage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Private Sub Fermer_Click() On Error GoTo GestionErreur DoCmd.Close GestionErreur: End Sub
Est-ce que je pourrais avoir distinctement la meme opération dans le Form_Close et dans le Form_Unload sans que mon message d'erreur soit dupliqué?
Parce que si l'utilisateur, dans mon formulaire, clique sur "Annuler", cela appelera un Docmd.Close et donc la méthode Form_Close. Mais si l'utilisateur a entrer des données et qu'il quitte autrement que par "Ok" ou "Annuler", c'est cela qui cause probleme.
Est-ce que ça pourrait être bon que j'appele la méthode Form_Unload directement par ma fonction Click du bouton annuler? Comme cela il y aura une seule procédure.. Est-ce possible?
Bonsoir,
J'ai essayé, ça fonctionne pas.
Dans l'évênement On_Click de ton bouton tu peux simuler l'appuie sur la croix de fermeture de la fenêtre.
Dans un module de code j'ai mis :Et dans le code du bonton
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Public Const WM_CLOSE As Long = &H10 Public Declare Function SendMessage Lib "User32.dll" Alias "SendMessageA" _ (ByVal hWnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As LongMoi ça fonctionne avec W98/Access2000. A vérifier sur d'autres plateformes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Private Sub BoutonFermer_Click() Dim RetVal As Long RetVal = SendMessage(Me.hWnd, WM_CLOSE, 0, 0) End Sub
Sinon la proposition de ActionAccess marche impécable. Tu dois juste intercepter et ignorer l'erreur quand tu annule l'action Unload.
A+
Peut-être que si je désactiverais le bouton "X", j'aurais seulement a m'occuper du Docmd.Close?
Est-ce que ça pourrait être une bonne solution?
Il y a aussi cette technique à adapter à un formulaire (ici le cas porte sur l'appli access)
http://www.developpez.net/forums/vie...669516#2669516
Non, ce n'est pas exactement de la manière que je souhaite l'exploiter. Ce n'est pas grave, je me suis trouvé une solution.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager