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 :

Gestion de l’événement click avec WithEvents dans un module de classe


Sujet :

IHM

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut Gestion de l’événement click avec WithEvents dans un module de classe
    Bonjour à tous,

    J'ai un formulaire avec X boutons qui tous appellent la même fonction sous l’événement

    • Click -> fonction1(Screen.ActiveControl.Name) pour les X boutons
    • DblClic -> fonction2(Screen.ActiveControl.Name) pour les X boutons


    Les fonctions appelées sous les événements Clic (fonction1) et DblClick(fonction2) ont comme paramètre, le nom de l’objet (Screen.ActiveControl.Name)

    Je voudrais éviter de déclarer les événements Click & DblClick pour chaque bouton et donc capturer l’événement indépendamment de l’objet, en quelque sorte avoir Screen.ActiveControl.Event qui n'existe pas

    Merci par avance pour toute aide
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Pas sur de comprendre mais si tu n'as pas besoin de savoir quel bouton est appuyé il te suffit de supprimer le paramètre Screen.ActiveControl.Name. Tous tes boutons feront alors exactement la même chose.

    Si tu as besoin d'un comportement différent pour chaque bouton alors il te faut soit une procédure événementielle par bouton soit un gros Select case dans ta fonction de traitement.

    Un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select case prmObjeAppelant.name
        case me.bouton1.name 
            'Faire quelque chose pour le bouton 1
     
        case me.bouton2.name 
            'Faire quelque chose pour le bouton 2
     
    end select
    Si ma réponse ne correspond pas à tes attentes met un exemple de ce que tu veux faire.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Bonjour marot_r

    Merci pour la piste, je teste ta solution qui me paraît être ce que je cherchais !

    Encore merci
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Bonjour Informer et Marot

    J'ai un formulaire avec X boutons qui tous appellent la même fonction sous l’événement
    Tes boutons de commande sont-ils indicés avec des noms de la forme "bouton1","bouton2",...,"bouton32".

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Bonjour User,

    Non et je charge une capture de la forme pour mieux comprendre mon besoin

    Pièce jointe 574742

    Sur l'évenement Click du bouton et quelque soit le bouton j'appelle toujours les 2 mêmes fonctions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub LeBoutonCliqué_Click()
        fGetData (Screen.ActiveControl.Name)
        fSetSubForm (Screen.ActiveControl.Name)
    End Sub
    C'est toujours le même code soit tous les événements Click d'où ma demande d'avoir une fonction qui capture les évenements et permette d'identifier l'objet bouton et si c'est le cas alors appel des deux fonction avec Screen.ActiveControl.Name en paramètre

    Merci encore pour votre aide
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  6. #6
    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,
    Dans la propriétés Sur clic du bouton XA tu mets: =NomDeFontion("XA")
    Pareil pour tous tes boutons
    Et dans le formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function NomDeFontion(NomControle as string)
        fGetData Me(NomControle)
        fSetSubForm Me(NomControle)
    End Function
    Un travail qui plait est à moitié fait.

  7. #7
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    En complément, je me demande si l'argument est indispensable ?

    Peut-être faudrait-il utiliser Screen.ActiveControl.Name dans les fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function fGetData()
    Dim nomControle as string
    nomControle = Screen.ActiveControl.Name
    ...
    end function
    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Ok c'est plus clair, voici l'astuce que je te suggère :

    Met la fonction ci-dessous dans le code du formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function btnForm_Click() 'Tu peux mettre le nom que tu veux et il FAUT que ce soit une fonction.
       fGetData (Screen.ActiveControl.Name)
       fSetSubForm (Screen.ActiveControl.Name)
    end function
    Après tu sélectionnes tous les boutons qui t'intéresse et dans l'événement Sur Clic tu mets :

    car on peut appeler une fonction à partir de l'événement.

    Cela va faire comme si tu avais créé une sub par bouton.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    ça me semble en effet un bon compromis entre le code de tortille et ma remarque
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Bon ça c'est le basic et ce n'est pas la solution que je recherche
    Je ne veux pas déclarer l'événement click pour chaque bouton mais capturer l'événement au niveau du screen et tester si c'est sur un bouton et si c'est le cas envoyer screen.Activecontrole.Name

    Donc a priori pas possible.

    Merci à tous
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  11. #11
    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,
    Excuse, je suis parti comme un bourrin à côté de ta question, juste ce lien en rapport avec l'utilisation des objets Screen.
    Un travail qui plait est à moitié fait.

  12. #12
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Merci Tortille mais encore une fois il faut déclarer un événement sur un objet, dans l'exemple du lien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub lstMousePointer_Click()
    C'est ce que je veux éviter
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  13. #13
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Une idée, essayer de capter l'événement au niveau du formulaire (genre Sur Clic), peut-être ?

    Il y aurai toujours un objet avec un événement mais juste 1.

    Sinon peut-être une API de Windows mais là on arrive dans ma zone de profonde incompétence.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  14. #14
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    marot_r
    Il n'y aucun événement sur le formulaire qui capte tous les événements des objets du formulaire.
    Donc peut être une API mais laquelle?
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  15. #15
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    bonjour.

    Il y a un truc pour que les touches soient interceptée au niveau du formulaire, (aperçu des touches) mais en effet il ne semble pas y avoir la même chose au niveau des événements.

    Pour l'API aucune idée et je ne sais même pas si elle existe. Quelque chose qui a avoir avec les fenêtres.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  16. #16
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    marot_r,

    Voici un lien ICI merci Gustav Brock ! permettant de charger une démo qui répond à mon problème à quelques modifications près notamment sur le type d'objet.

    Il faut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Définir une classe
    Utiliser WithEvents
    Pour plus d’info Cliquez ici
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  17. #17
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    En effet c'est intéressant … par contre documente super bien ta solution en expliquant comment s'en servir car c'est assez atypique.
    Il y a des chances que la personne qui vienne après toi n'y comprenne rien.
    Il y a peu de gens qui connaissent le WithEvents et s'en servent.

    Donc je mettrai des choses comme :

    dans la partie module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Déclarer ici tous les boutons partageant un même événement 
    'Le code associé au bouton est dans le module de classe [ici le nom du module].
    dans le Load
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'Assigner les boutons réels aux boutons mutualisés.
    Pas juste le code brut de décoffrage.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  18. #18
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    La solution Ici
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  19. #19
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    URL du code base de l'exemple modifié -> Cliquez ici
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  20. #20
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Liens ici pour plus d'exemples
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. capture d'évenements d'écran
    Par hmidi dans le forum Windows
    Réponses: 4
    Dernier message: 30/05/2009, 10h10
  2. Capturer les évenements déclenché par un scanner
    Par shirya dans le forum VB.NET
    Réponses: 0
    Dernier message: 23/04/2009, 21h52
  3. déclencher l'évenement keydown au niveau de ma form
    Par beet2che dans le forum VB.NET
    Réponses: 2
    Dernier message: 05/03/2009, 10h45
  4. capturer les évenements du presse papier
    Par frantzgac dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 21/01/2009, 00h51
  5. capturer l'évenement validation
    Par Dr_shaman dans le forum SharePoint
    Réponses: 1
    Dernier message: 17/06/2008, 12h04

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