none
évènements souris sur l'ensemble des controles contenus dans un panel RRS feed

  • 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

    mardi 29 mai 2012 11:05

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
    mardi 29 mai 2012 12:26
    Modérateur

Toutes les réponses

  • Essaye d'ajouter un background à ton panel, même transparent.
    mardi 29 mai 2012 11:30
  • Le background n'a rien changé au problème. Je vois d'ailleurs pas vraiment comment ça aurait pu.
    mardi 29 mai 2012 11:57
  • 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
    mardi 29 mai 2012 12:26
    Modérateur
  • 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

    mardi 29 mai 2012 19:15
  • 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

    mardi 29 mai 2012 19:36