Tester si la souris a vraiment quitter un control : mouseleave

Contenu du snippet

Il arrive parfois que l'on veuille utilise l' évènements MouseLeave mais le problème est que l'évènement se produit même si la souris est sur un enfant du contrôle.

La souris est entré sur un contrôle enfant mais elle n'a pas quitté, à proprement parlé, le contrôle.

Voici donc un bout de code qui permet de pallier à ce soucis, sans grande prétention mais qui peut s'avérer très utiles, comme lorsque l'on veut cacher un panel quand la souris l'a quitté.

Source / Exemple :


//exemple de mouseleave
public void panel1_MouseLeave(object sender, EventArgs e)
{
  Control tc = (Control)sender;
  //Chercher l'enfant se trouvant à la position de la souris
  Control child = tc.GetChildAtPoint(tc.PointToClient(Control.MousePosition));

  //On teste si on a trouvé un enfant
  if(child == null)
  {
    //Aucun enfant trouvé donc :
    //on a vraiment quitté le contrôle !
    //effectuer le code approprié
  } else {
    //On a quitté le panel1 mais on est sur un de ses enfants
    //donc on ne l'a pas vraiment quitté
  }
}

Conclusion :


Je met ce code parce que j'ai trouvé des gens qui vont jusqu'à créer des Hook de souris pour faire ce test alors qu'avec le framework on peut le faire tout simplement.

un exemple : http://blog.bee-eee.com/2008/01/04/c-capture-the-mouse-get-a-global-hook-on-the-mouse/

Cordialement.

A voir également

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.