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 :

[VBA] Gestionnaire d'évènement commun


Sujet :

Access

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut [VBA] Gestionnaire d'évènement commun
    Re-bonjour à tous,

    cette fois-ci je ne me suis pas trompé de champ lors de ma recherche sur le forum (lors de mon dernier post j'avais mis mes mots clef dans le champ destiné aux noms d'utilisateurs )

    J'ai l'habitude en C++ Builder de pouvoir utiliser un gestionnaire d'évènement commun à plusieurs élements devant se comporter de manière analogue, en effet C++ Builder passe en paramètre de tout gestionnaire l'élement qui "Envoie" l'évènement.

    Je souhaiterais faire quelque chose d'analogue sous Access 2002 : j'ai un nombre assez conséquent de Label qui doivent tous avoir le même comportement (lors d'un double clic ils changent de couleur par exemple).
    Au lieu d'écrire à chaque fois la fonction j'aimerais pouvoir l'écrire une fois et que celle-ci détermine sur quel label on a cliqué et agisse en conséquence.

    Pour l'instant ma fonction qui effectue les modifications sur le Label prend en paramètre le nom du Label et j'appel cette fonction dans chaque gestionnaire.

    Pour résumer pour l'instant j'ai quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Private Sub ChangerCouleur( strLabelName As String )
       Dim lblActive As Label
       Set lblActive = Me(strLabelName)
     
       If IsNull(lblActive) Then
            MsgBox "Le label '" & strLabelName & "' n'existe pas. Impossible de modifier son état.", vbCritical, "Erreur - Label inexistant"
            Exit Sub
        End If
     
        ' Change la couleur du label = change l'état utilisé/pas utilisé
        If lblActive.ForeColor = CST_ACTIVATE_COLOR Then
            lblActive.ForeColor = CST_DEACTIVATE_COLOR
        Else
            lblActive.ForeColor = CST_ACTIVATE_COLOR
        End If
    End Sub
     
    Private Sub L_BATEAU_DblClick(Cancel As Integer)
        ChangerCouleur("L_BATEAU")
    End Sub
     
    Pirvate Sub L_BARQUE_DblClick(Cancel As Integer)
       ChangerCouleur("L_BARQUE")
    End Sub
    Et j'aimerais à me ramener à un seul gestionnaire DblClick.
    Quelqu'un sait il comment déterminer sur quel Label on vient de cliquer ?
    Est-ce possible avec ?

    Merci d'avance !
    Neilos

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Je sais que c'est moins propre qu'une gestion purement commune mais si tu fais une procédure gestionAffichage que tu appelles dans les évènement de chaque contrôle, ça irait ?

  3. #3
    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
    Salut,

    A ma connaissance une étiquette ne prend pas le focus donc je crains que activecontrol ne fonctionne pas.

    Par contre si tu transforme ta procédure en fonction tu peux directement mettre dans la propriété événement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ChangerCouleur("L_BATEAU")
    Ou alors sinon peut-être avec WithEvents dans une classe si tu es motivé, mais je n'ai jamais esssayé avec des labels...Il doit y avoir moultes exemples sur le net.

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    Citation Envoyé par vmolines
    Je sais que c'est moins propre qu'une gestion purement commune mais si tu fais une procédure gestionAffichage que tu appelles dans les évènement de chaque contrôle, ça irait ?
    Ca c'est ce que je fais actuellement et justement je trouve pas ça très propre :S

    Citation Envoyé par Arkham46
    Par contre si tu transforme ta procédure en fonction tu peux directement mettre dans la propriété événement
    Que veux tu dire par transformer ma procédure en fonction ?
    Etant donné que les gestionnaire d'évènement sont du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Sub MonLabel_Click()
    End Sub
    je ne devrais pas garder quelque chose du genre ?
    Neilos

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    Je crois que je vois ce que tu veux dire : tu veux dire mettre ma procédure non plus dans le code du formulaire mais dans un module ?
    Neilos

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Si ta procédure gère le formulaire il n'est pas judicieux de la mettre dans un module. Sa place est bien dans les déclarations du formulaire (privée au formulaire).

  7. #7
    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
    ce que je voulais dire c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private function ChangerCouleur( strLabelName As String ) 
    End Function
    et à la place de [Procédure événementielle] dans la propriété Sur Click :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ChangerCouleur("L_BATEAU")
    à peu de chose près...

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    Ok merci je vais essayer cela.
    Mais étant donné que j'ai plusieurs formulaire différents qui auraient besoin de cette fonction je vais tenter de la mettre dans un module et de prendre aussi le nom du formulaire en paramètre.

    Merci pour votre aide, je vous tiens au courant !
    Neilos

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Si tu veux changer des propriétés de groupe de contrôle en masse avec passage de formulaire en paramètre je te conseille ceci :

    http://www.developpez.net/forums/vie...975772#1975772

    C'est une source que j'ai posée comme ça, elle contient sûrement des erreurs. Aussi je t'aiderais à l'adapter et à la corriger si besoin.

  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
    si tu fais ça dans plusieurs formulaire alors tu peux directement passer le contrôle en paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ChangerCouleur([L_BATEAU])
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Function ChangerCouleur( strLabel As Control ) 
    strLabel.ForeColor = ....
    ...
    End Function

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    Merci vmolines mais comme je ne modifie qu'un seul Label à chaque fois je n'ai pas besoin d'une boucle comme dans ta fonction (mais c'est vrai qu'elle peut être très utile).

    Merci aussi à Arkham46, je vais tester cela...et el fait de pouvoir passer directement le contrôle en paramètre va alléger un peu mon code

    Merci beaucoup à vous deux, je vais aller écrire tout cela de suite !
    Neilos

  12. #12
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    Voila en passant les quelques objets dont j'ai besoin en paramètre cela fonctionne vraiment très bien.

    Je vous remercie pour votre aide qui m'a été très précieuse
    Neilos

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

Discussions similaires

  1. Gestionnaire d'évènement commun à plusieurs contrôles
    Par jacquesprogram dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 07/08/2011, 20h00
  2. Maj dynamique d'un gestionnaire d'événement
    Par Herode dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/03/2006, 10h15
  3. Gestionnaire d'évènements pour les fichiers sur disque
    Par chourmo dans le forum Composants VCL
    Réponses: 2
    Dernier message: 01/03/2006, 16h18
  4. Gestionnaire d'événements pour la souris en assembleur
    Par bassim dans le forum Assembleur
    Réponses: 2
    Dernier message: 09/12/2005, 23h45
  5. Perte de gestionnaire d'événements dans une fenêtre
    Par Benjamin GAGNEUX dans le forum Composants VCL
    Réponses: 15
    Dernier message: 23/08/2004, 20h14

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