Meilleur auteur de réponses
évènements souris sur l'ensemble des controles contenus dans un panel

Question
-
Bonjour à tous,
Je me heurte à un problème tout bête mais qui commence à me saouler un peu :
J'ai un panel contenant divers contrôles. Je voudrais que la sortie de la souris des limites du panel déclenche la fermeture de celui-ci.
Le problème est que dès que ma souris passe sur l'un des contrôles, l'évènement Panel.MouseLeave se produit et donc me ferme tout
Comment faire pour que les contrôles contenus dans le panel soient considérés comme faisant partie de celui-ci au niveau de cet évènement souris.
Merci d'avance pour votre aide
Réponses
-
Bonjour,
dans l'event MouseLeave, tester si les coordonnées du pointeur de la souris sont bien à l'extérieur du panel. Par exemple :
private void panel1_MouseLeave(object sender, EventArgs e) { if (!this.panel1.ClientRectangle.Contains(this.PointToClient(Control.MousePosition))) { MessageBox.Show("Fermeture panel"); } }
Cordialement- Marqué comme réponse mag2013 mardi 29 mai 2012 19:15
Toutes les réponses
-
-
-
Bonjour,
dans l'event MouseLeave, tester si les coordonnées du pointeur de la souris sont bien à l'extérieur du panel. Par exemple :
private void panel1_MouseLeave(object sender, EventArgs e) { if (!this.panel1.ClientRectangle.Contains(this.PointToClient(Control.MousePosition))) { MessageBox.Show("Fermeture panel"); } }
Cordialement- Marqué comme réponse mag2013 mardi 29 mai 2012 19:15
-
Merci Nikho, c'est pile-poil ce qu'il me fallait,
j'étais effectivement parti dans une direction de ce type, mais en me cassant les pieds avec des pointtoscreen sur chaque coté du panel... bref une usine a gaz... là on peut pas faire plus simple.
Merci encore
-
PS : Pour ceux d'entre nous qui sont aussi primaires que moi et pour qui les C, C++ et autre c# sont des langages barbares incompréhensibles, voici l'équivalent qui fonctionne en vb :
If Panel.RectangleToScreen(Panel.ClientRectangle).Contains(System.Windows.Forms.Form.MousePosition) Then
ou encore
Inherits System.Windows.Forms.Form
If Panel.RectangleToScreen(Panel.ClientRectangle).Contains(MousePosition) Then