IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Cancel dans un BeforeUdate d'une case a cocher reste "colle" la ?


Sujet :

IHM

  1. #1
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut Cancel dans un BeforeUdate d'une case a cocher reste "colle" la ?
    Bonjour a tous et merci de votre temps et de votre aide.

    j'ai une cliente qui m'a demande de mettre une confirmation de changement d'état d'une case a cocher.

    j'ai donc implante le code classique suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Check0_BeforeUpdate(prmCancel As Integer)
     
        If vbNo = MsgBox("Do you confirm", vbQuestion + vbYesNo + vbDefaultButton2) Then
            prmCancel = CInt(True)
        End If
     
    End Sub
    Et en effet si je reponds Non au message, Access annule la modif et recoche ou redecoche la case a cocher.
    Le probleme c'est que si je change de champ, mon message de demande de confirmation se declenche a nouveau.
    La seule facon que j'ai trouve de m'en sortir est d'appuyer sur la touche "esc" qui brise le cycle de demande de confirmation.

    • Si je fais :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      Private Sub Check0_BeforeUpdate(prmCancel As Integer)
       
          If vbNo = MsgBox("Do you confirm", vbQuestion + vbYesNo + vbDefaultButton2) Then
              prmCancel = CInt(True)
              me.Check0.undo
          End If
       
      End Sub
      Je n'ai plus de cycle mais ma case a cocher n'est pas remise dans son etat inital.
    • J'ai essaye de memoriser la valeur et de la reassigner mais cela genere un message d'erreur me disant que j'ai un macro dans BeforeUpdate qui empeche d'appliquer le changement.
    • J'ai essaye

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      Private Sub Check0_BeforeUpdate(prmCancel As Integer)
       
          If vbNo = MsgBox("Do you confirm", vbQuestion + vbYesNo + vbDefaultButton2) Then
              me.Check0.undo
          End If
       
      End Sub
      Et la non seulement mon nouvel etat est conserve mais cela le AfterUpdate se declenche.
    • Enfin, le code :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      Private Sub Check0_BeforeUpdate(prmCancel As Integer)
       
          If vbNo = MsgBox("Do you confirm", vbQuestion + vbYesNo + vbDefaultButton2) Then
              prmCancel = CInt(False)
              Call SendKeys("{ESC}")
          End If
       
      End Sub
      Fait ce que je veux.


    Quelqu'un a-t-il deja resolu ce probleme sans utiliser SendKeys(qui n'est pas tres securitaire car il depend du contexe) ?

    A+

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 769
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 769
    Points : 14 810
    Points
    14 810
    Par défaut
    Bonjour marot_r,
    pour info, Me.Undo a le même effet que SendKeys("{ESC}"): on revient à l'état initial (avant toutes les modifs effectuées)

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    C'est in undo au niveau du formulaire ?

    Parce que mes tests au niveau du controle demontrent que le undo ne ramene pas l'etat de la case a cocher.

    A+

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 769
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 769
    Points : 14 810
    Points
    14 810
    Par défaut
    Oui, c'est Undo au niveau du formulaire

  5. #5
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 284
    Points : 284
    Points
    284
    Par défaut
    Bonjour,
    Ton 1er code fonctionne, mais il ne "quitter" pas la commande aussi j'ai essayé de mettre Exit Sub avant End Sub pour le forcer à quitter, et chez moi ça fonctionne.

  6. #6
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 912
    Points : 4 811
    Points
    4 811
    Par défaut
    Bonjour,

    Je propose dans ces cas là, de ne poser la question à l'utilisateur que si la valeur a été changée :

    dans l'evt Check0_InFocus() , je mémorise la valeur initiale de Check0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_Check0_oldValue= nz(me.check0 ,0)
    avec m_Check0_oldValue déclarée Bolean au viveau du module

    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub Check0_BeforeUpdate(prmCancel As Integer)
    if m_Check0_oldValue <> me.Check0 then
        If MsgBox("Do you confirm", vbQuestion + vbYesNo + vbDefaultButton2) <> vbyes Then
            prmCancel = TRUE
        End If
    end if
    End Sub
    ca devrait le faire (pas testé).
    Peut-être aussi plus directement avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if m_Check0.oldValue <> me.Check0 then  ...
    (sans besoin de la variable m_Check0_oldValue )

    Bon test
    CDLT

  7. #7
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 284
    Points : 284
    Points
    284
    Par défaut
    Bonjour,
    Presque comme micniv, mais je crée le contrôle StopFocus de 1x1 pixel en haut et à gauche du formulaire pour qu'il soit invisible, ce qui permet d'y envoyer le focus en fin d'évènement Click et donc de repasser par l'évènement GotFocus au Click suivant pour mémoriser l'ancienne valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Compare Database
    Dim m_Check0_oldValue As Boolean
     
    Private Sub Check0_GotFocus()
        m_Check0_oldValue = Me!Check0
    End Sub
     
    Private Sub Check0_Click()
        If vbNo = MsgBox("Do you confirm", vbQuestion + vbYesNo + vbDefaultButton2) Then
            Me!Check0 = m_Check0_oldValue
        End If
        Me!StopFocus.SetFocus
    End Sub

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/12/2012, 20h31
  2. [AC-2003] nom d'une case a cocher dans un champs d'une table
    Par chuspyto dans le forum IHM
    Réponses: 1
    Dernier message: 18/10/2009, 12h07
  3. Réponses: 4
    Dernier message: 06/10/2006, 09h06
  4. [WebForms]Ajout d'une case a cocher dans l'entête d'un DataGrid
    Par julio84 dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 02/06/2005, 15h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo