Associer un événement d'un contrôle parent aux contrôles enfants [Résolu]

Messages postés
30
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
17 septembre 2009
- - Dernière réponse : Passepoil75
Messages postés
30
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
17 septembre 2009
- 22 juil. 2008 à 17:13
Bonjour à tous,

J'aimerais savoir s'il est possible d'affecter un événement d'un contrôle parent aux enfants sans passer par le Handles?

Exemple:

   Private Sub maFonction_MouseEnter(ByVal  Sender As Object, ByVal e As System.EventArgs) Handles 
               panel.MouseEnter

      If  not  panel.IsDock Then
            _timer.stop
      End If

End Sub

J'aimerais que tous mes contrôles enfants qui sont sur mon panel puisse arrêter mon _timer lorsque la souris entre sur le contrôle sans ajouter chacun d'entre-eux dans le Handles afin que si quelqu'un d'autre (ou moi-même) ajoute un contrôle sur le panel, l'événement MouseEnter fonctionnera pour celui-ci.

Pascal
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
30
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
17 septembre 2009
3
Merci
Pour ceux et celles qui tomberont sur le même problème, voici la solution que j'ai trouvé:

Public
Shared
Sub myAddHandler(
ByRef frm
As Form1,
ByRef ctlParent
As Control)




      On





Error





Resume





Next










      For





Each

ctlEnfant


As

Control


In

ctlParent.Controls



            If

ctlEnfant.Controls.Count > 0


Then

myAddHandler(frm, ctlEnfant)



           AddHandler

ctlEnfant.MouseEnter,


AddressOf

frm.rTabAccueil_MouseEnter



      Next








End





Sub


La fonction se rappelle elle-même si le control est lui-même un control parent.

Le ResumeNext permet à la fonction de continuer si le Event MouseEnter n'existe pas pour le control.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Passepoil75
Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
3
0
Merci
j'ai l'impression que pour que la mouse arrive sur un contrôle qui se trouve dans ton panel, il faut dabors qu'elle passe sur ton panel ??


si j'ai raison cela réponds à ta question??? 






Il n'y a que les gens qui ne font rien, qui ne font pas d'erreur



/B>
Commenter la réponse de gillardg
Messages postés
30
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
17 septembre 2009
0
Merci
Oui, tu as raison.  Par contre, j'ai aussi un événement MouseLeave qui démarre le timer. 

Donc, aussitôt que la mouse entre sur un contrôle enfant, l'événement Panel.MouseLeave est appelé.

Alors, je ne suis pas avancé!!
Commenter la réponse de Passepoil75
Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
3
0
Merci
  Private Sub maFonction_MouseEnter(ByVal  Sender As Object, ByVal e As System.EventArgs) Handles 
               panel.MouseEnter , machin.MouseEnter , truc.MouseEnter,...

      If  not  panel.IsDock Then
            _timer.stop
      End If

End Sub

Il n'y a que les gens qui ne font rien, qui ne font pas d'erreur

/B>
Commenter la réponse de gillardg
Messages postés
30
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
17 septembre 2009
0
Merci
Donc, si je comprend bien, c'est que tu n'as pas plus de solution que moi? 

Ou qu'il n'y a pas d'autre moyen?
Commenter la réponse de Passepoil75
Messages postés
30
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
17 septembre 2009
0
Merci
J'ai une idée qui n'est pas la solution que j'aurais espérée mais voici:

au Form_Load

For

Each ctl
As Control
In
Me.Panel.Controls

AddHandler ctl.MouseEnter,
AddressOf 
panel_MouseEnter

Next
Commenter la réponse de Passepoil75
Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
3
0
Merci
possible si le contrôle possède un event mouseenter

Il n'y a que les gens qui ne font rien, qui ne font pas d'erreur

/B>
Commenter la réponse de gillardg