French B4X Page

CR95

Active Member
Licensed User
Bonjour,
A la fermeture d'une page B4X, je veux demander à l'utilisateur de confirmer la fermeture.
Mon problème est que la fermeture de la page en cours se fait avant que la réponse ait été traitée et la page de retour est affichée immédiatement.
En pratique, dans la routine "Private Sub B4XPage_Disappear", il y a un Wait For qui devrait gérer l'attente de la réponse :
B4X:
    Private Sub B4XPage_Disappear
    Log("Disappear")
    Log("demande")
    Dim GlobalMessage As String = "Arréter le PIP ?"
    Msgbox2Async(GlobalMessage,"PIP actif","Oui","","Non",Null,False)
    Wait For Msgbox_Result (Result As Int)
    Log("Réponse")
    If Result = bla bla
Et le Log affiche :
B4X:
Disappear
demande
Ecran2Commun Appear
Réponse
qui indique que ma page "retour" (Ecran2Commun) apparaît immédiatement.
Est-ce que je ne suis pas dans la bonne routine (pour moi, B4XPage_Disappear est lancé quand l'utilisateur clique sur la flèche retour dans le menu en haut à gauche) ?
Merci de votre aide,
 

klaus

Expert
Licensed User
Longtime User
Lorsque l'événement B4XPage_Disappear est exécutée c'est trop tard.

Avec la routine ci-dessous, qui capte le demande de fermeture avant que celle-ci ne s'exécute, cela fonctionne.

B4X:
Private Sub B4XPage_CloseRequest As ResumableSub
    Log("demande")
    Dim GlobalMessage As String = "Arréter le PIP ?"
    Msgbox2Async(GlobalMessage, "PIP actif", "Oui", "", "Non", Null, False)
    Wait For Msgbox_Result (Result As Int)
    Log("Réponse")
    If Result = xui.DialogResponse_Positive Then
        Log("Oui")
        Return True
    Else
        Log("Non")
        Return False
    End If
End Sub
 

CR95

Active Member
Licensed User
Merci Klaus. Cela fonctionne comme je le voulais maintenant
Que se passe t'il si on sort de cette routine avec False ? Il ne close pas la page en cours ?
 

klaus

Expert
Licensed User
Longtime User
Que se passe t'il si on sort de cette routine avec False ? Il ne close pas la page en cours ?
Return False ferme la page.
Return True ne la ferme pas.
Return True correspond à ne pas transmettre, 'consommer', l'événement, donc ne rien faire.
Return False correspond à transmettre l'événement donc fermer la page.
 
Top