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
Dernière intervention
17 septembre 2009
- - Dernière réponse : Passepoil75
Messages postés
30
Date d'inscription
vendredi 12 janvier 2007
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 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
30
Date d'inscription
vendredi 12 janvier 2007
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 87 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Passepoil75
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Dernière intervention
14 septembre 2014
17
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
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
3288
Date d'inscription
jeudi 3 avril 2008
Dernière intervention
14 septembre 2014
17
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
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
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
3288
Date d'inscription
jeudi 3 avril 2008
Dernière intervention
14 septembre 2014
17
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.