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

Access Discussion :

Evènements Clic et Double Clic dans un contrôle


Sujet :

Access

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 18
    Points
    18
    Par défaut Evènements Clic et Double Clic dans un contrôle
    J'ai un contrôle dans un formulaire de recherche.
    Quand je clique dessus, il ouvre un autre formulaire filtré en mode lecture seule
    Quand je double-clique dessus, il m'ouvre le même formulaire en mode modifications de données.

    J'ai plusieurs bases qui fonctionnent avec ce principe. Dans certaines bases, ça fonctionne sans problème alors que dans d'autres ça ne fonctionne pas. L'évènement Double Clic ne se produit pas !

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub N_essai_Click()
       Dim stDocName As String
        stDocName = "Tribomètre_Main"
        DoCmd.OpenForm stDocName, , , "[N_essai]=" & Me![N_essai], acFormReadOnly
    End Sub
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub N_essai_DblClick(Cancel As Integer)
    Dim stDocName As String
     Cancel = True
    stDocName = "Tribomètre_Main"
    DoCmd.Close acForm, stDocName, acSaveNo
    DoCmd.OpenForm stDocName, , , "[N_essai]=" & Me![N_essai], acFormEdit
    End Sub
    Je ne vois qu'une différence entre les bases pour lesquelles ça marche et celles ou ça foire. Les formulaires de ces dernières sont plus complexes et comprennent des sous-formulaires.

    Avez vous des expériences similaires avec la gestion des évènements.

    Merci de m'aider. En attendant, je crée un gros bouton qui fera office.

  2. #2
    MC2
    MC2 est déconnecté
    Membre habitué

    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2002
    Messages : 148
    Points : 199
    Points
    199
    Par défaut
    Bonsoir,
    à quoi te sert le ?
    Je viens de re-regarder l'aide pour être sûre : ce code annule toute modification faite dans ton formulaire.
    Ne serait-ce pas cela ton pb ? style : le cancel annule ta saisie dans ton champ N_essai, qui revient à la valeur vide et du coup, ton critère d'ouverture foire...

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Merci MC2 pour ta réponse.

    D'après l'aide d'Access, le cancel = true sert à annuler l'évènement clic.
    Dans mes bases dans lesquelles ça fonctionne, la séquence suivante se produit :
    -> clic sur le contrôle
    -> ouvre le formulaire en mode lecture seule
    -> double clic
    -> ferme le formulaire
    -> ouvre le formulaire en modif

    De toute façon, j'ai essayé sans le Cancel = True et ça ne marche pas mieux !

    Lorsque j'enlève l'évènement Clic, le double clic se produit bien. Il y a donc bien un problème d'interaction entre ces deux évènements.

  4. #4
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    Salut,

    Pourquoi ne pas passer par un message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim stDocName As String
        stDocName = "Tribomètre_Main"
     
    If MsgBox("Voulez_vous ouvrir le Formulaire en édition ?", vbYesNo + vbQuestion, "Question?") = vbNo Then
     
        DoCmd.OpenForm stDocName, , , "[N_essai]=" & Me![N_essai], acFormReadOnly
     
    Else
     
        DoCmd.Close acForm, stDocName, acSaveNo
        DoCmd.OpenForm stDocName, , , "[N_essai]=" & Me![N_essai], acFormEdit
     
    End If
    Sur clic tu demande à l'utilisateur si il veut ouvrir en mode 2dition?

    @+

  5. #5
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    Alors,

    Le fait de passer par un message t'inspire ?

    Tu peux ajouter le bouton annuler au message au cas ou l'utilisateur veux annuler ca commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox "Voulez_vous ouvrir le Formulaire en édition ?", vbYesNoCancel + vbQuestion, "Question?"
    Bon Week. @+

  6. #6
    MC2
    MC2 est déconnecté
    Membre habitué

    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2002
    Messages : 148
    Points : 199
    Points
    199
    Par défaut
    Salut jeportal,
    as-tu des nouvelles à nous donner ?
    J'ai testé et quoi que je fasse, c'est le clic qui se produit.
    Maintenant, je me suis posée qq questions sur ton exposé :
    tu dis
    J'ai plusieurs bases qui fonctionnent avec ce principe. Dans certaines bases, ça fonctionne sans problème alors que dans d'autres ça ne fonctionne pas. L'évènement Double Clic ne se produit pas !
    S'agit-il bien de bases ou bien de formulaires au sein de la même base ?
    Dans les 2 cas, je m'orienterais plutôt vers des propriétés différentes entre tes bases (?) ou bien formulaires.

    Mais au final, la proposition de Dolphy35 paraît la plus logique pour palier dans tous les cas à tes pb.
    A+

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Salut,

    N'étant pas informaticien à la base, je ne travaille pas le week end.


    C vrai que la boite de dialogue est une option
    Elle évite le gros bouton dans le formulaire principal.

    Mais voilà :
    1 - Je suis interpellé par le fait que ça ne marche pas
    2 - LE DOUBLE CLIC, c'était quand même élégant. Ca permet aussi à ceux qui sont vraiment au fait du fonctionnement de la base d'en modifier le contenu. Je sais bien que le fichier de sécurité est aussi fait pour ça mais il y a toujours de petites irrégularités
    3 - Comme je vous l'ai dit, ce principe fonctionne parfaitement pour certaines de mes bases. J'ai l'impression que plus le formulaire est lourd à charger en mémoire, plus ça prend de temps, et le code en oublie que l'on a double-cliqué !

    Maintenant, c'est sûr, ça fait beaucoup d'énergie pour résoudre un problème qui peut être contourné. C'est juste agaçant de ne pas réussir à résoudre ça. Et puis, il y a d'autres applications. Le clic ou double-clic sur un objet, c'est quand même courant de nos jours.

  8. #8
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    slt,

    C'est sûr si les formulaires sont long à ouvrir il a peut-être du mal à enchaîner ouverture-fermeture-ouverture dans le temps d'un double-click.

    Peut-être en mettant des instructions DoEvents après fermeture et ouverture du formulaire pour forcer windows à traiter la file de message.

    Mais en fait quand tu double-cliques il :
    - ouvre le formulaire en lecture seule
    - puis il le ferme
    - et il réouvre en édition

    N'y a-t-il pas un moyen de passer directement de lecture-seule à édition?
    Avec un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub N_essai_DblClick(Cancel As Integer) 
    Dim stDocName As String 
     Cancel = True 
    stDocName = "Tribomètre_Main" 
    forms(stDocName).AllowEdits = True
    forms(stDocName).AllowDeletions  = True
    forms(stDocName).AllowAdditions  = True
    End Sub
    :

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Merci pour ta réponse, je vais essayer.

    Pour répondre à ta question Arkham, il ne semble pas y avoir moyen. Dans Access, d'après l'aide, l'évènement clic se produit dans tous les cas. Comme mon évènement clic ouvre mon formulaire, mon évènement double clic doit d'abord le refermer puis le réouvrir en mode édition.

    C'est clairement décrit dans l'aide access "évènement double click"

    Mais l'aide est contradictoire. Elle dit aussi que windows gère directement le double clic via le paramètrage de la souris.

    J'essaie tes doevents

  10. #10
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Comme mon évènement clic ouvre mon formulaire, mon évènement double clic doit d'abord le refermer puis le réouvrir en mode édition.
    Justement mon interrogation était de savoir s'il était nécessaire de le fermer pour le réouvir.
    S'il est déjà ouvert tu peux peut-être simplement changer ses propriétés ce serait plus rapide et ça aurait moins l'allure de "bidouille".

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    J'y ai cru Arkham mais l'évènement double clic ne se produit tout simplement pas. Pour Preuve, une petite msgbox après ou avant le cancel = true ne s'affiche pas. Si on commente l'évènement clic alors là, il se produit.

    DoEvents n'a pas résolu le problème non plus. Troublant.

    PS : au fait , félicitations pour ta classe Image. J'ai quelques applications intéressantes à traiter. Notamment, des plans de machines comme d'autres l'ont dit. Tiens, un petit bug sur les collisions. Si tu bouges ta souris rapidement, un personnage est capable de traverser l'autre. Tu vois la relation avec mon problème actuel !!!

  12. #12
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Dur dur ...

    L'événement double-click serait-il un événement de priorité basse(?) et par le fait annulé s'il n'a pas eu lieu avant un certain temps? (un peu la manière d'un timer, si tu déclenches un timer toutes les 10s pour faire un traitement qui durent 30s alors deux timers sur trois sont annulés)

    Peut-être faut-il vérifier la queue dans l'événement click pour y trouver un événement double-click ou non et faire le traitement adéquat...?

    Ouais bon ça va chercher loin ça et access gère un peu ses événements sur les contrôles en interne et pas forcément comme le fait windows pour un "vrai" contrôle.
    Ca donne envie tout ça! Mais ce serait intéressant de comprendre quand même pourquoi ça ne se déclenche pas.

    A part ça :
    félicitations pour ta classe Image
    Merci
    Tiens, un petit bug sur les collisions. Si tu bouges ta souris rapidement, un personnage est capable de traverser l'autre
    Bug c'est un bien grand mot pour si peu de chose!
    Si j'ai bien compris je pense que en fait si tu déplaces la souris trop vite l'événement se déclenche un coup à droite et ensuite un coup à gauche sans passer par les positions intérmédaires.
    C'est pas toujours comme on veut avec les événements! :-)
    Donc y a pas collisions, y a téléportation du sprite!

  13. #13
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    bonjour
    Dans ton code il y a effectivement un truc bizarre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub N_essai_DblClick(Cancel As Integer) 
    Dim stDocName As String 
     Cancel = True 
    stDocName = "Tribomètre_Main" 
    DoCmd.Close acForm, stDocName, acSaveNo 
    DoCmd.OpenForm stDocName, , , "[N_essai]=" & Me![N_essai], acFormEdit 
    End Sub
    En fait tu fermes un formulaire et tu veux le réouvrir avec une variable Me![N_essai] qui fait référence à un formulaire fermé! C'est certainement assez difficile pour Access.

    Il me semble que tu devrais vraiment t'orienter ver la solution d'Arkham46 qui te permets de passer du mode consultation à modification.
    à toi ensuite de gèrer si tu veux rajouter une ligne seulement ou plusieurs et ensuite repasser en mode consultation.

  14. #14
    MC2
    MC2 est déconnecté
    Membre habitué

    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2002
    Messages : 148
    Points : 199
    Points
    199
    Par défaut
    Salut,
    j'ai réussi à faire reproduire une différence : ça dépend si ta form appelante est déclarée en Popup ou non.
    Quand elle l'est, elle garde le focus même à la suite de l'ouverture de l'autre form et donc, le doucle-clic se produit.
    Je ne sais pas si c'est ton cas...
    A+

  15. #15
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Salut et merci de vous passioner pour ce sujet

    Je réponds d'abord à Alexandre Sahli
    En fait tu fermes un formulaire et tu veux le réouvrir avec une variable Me![N_essai] qui fait référence à un formulaire fermé! C'est certainement assez difficile pour Access.
    Access le fait très bien. D'ailleurs, c'est comme cela aussi qu'il ouvre le formulaire en lecture seule (cf début de ce post). Access ouvre d'abord le formulaire puis il y applique le filtre. Donc pas de problèmes de ce côté.
    J'ai d'ailleurs essayé la solution d'Arkham le magnifique (Cf Pacman sous Access, il fallait oser !). Mais à l'évidence, le double-clic ne s'ouvre pas.

    Ensuite, je réponds à MC2

    ta form appelante est déclarée en Popup ou non
    Bravo, tu as trouvé. Il faut déclarer le formulaire appelant en tant que fenêtre indépendante. Le double clic se produit en effet. Seulement, un problème en cache un autre. Le formulaire qui s'ouvre est alors caché derrière le formulaire appelant. J'essaierai de minimiser le form appelant avant d'ouvrir le formulaire. Après quoi, on pourra mettre [résolu].

    Merci !!

  16. #16
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    lol , c'est plus simple que mon explication!

  17. #17
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Arrrgghh !

    En passant le form appelant en fenêtre indépendante, le double clic est pris en compte comme je l'ai dit. Seulement, la fenêtre du form appelant reste en avant plan. J'ai donc mis
    histoire de voir mon form appelé. Et là, le double clic ne se produit plus à nouveau.
    J'ai essayé les 3 cas de figures :
    - minimiser sur clic et pas sur double clic
    - minimiser sur double clic et pas sur clic
    - minimiser lors des 2 évènements

    Par contre, une chose est sûre. Quand l'évènement double clic se produit, l'évènement clic se produit avant. Donc le code d'Arkham, qui modifie simplement les prorpiétés du form appelé sur double clic fonctionne.

    Là, je renonce.

    Merci pour votre collaboration.

Discussions similaires

  1. Utiliser le double clic sur une liste dans HTA
    Par papyxy dans le forum VBScript
    Réponses: 3
    Dernier message: 06/07/2014, 09h14
  2. Réponses: 17
    Dernier message: 18/03/2010, 06h43
  3. Evènement sur un double clic dans un polyline
    Par nwktotof dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 10/07/2009, 09h12
  4. IceFaces : double clic sur une ligne dans une table
    Par sebastiens57 dans le forum JSF
    Réponses: 4
    Dernier message: 13/11/2008, 10h55
  5. Réponses: 8
    Dernier message: 11/05/2006, 11h04

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