[C#] Sélection d'un item d'une listbox en passant la souris dessus

nerix27 Messages postés 86 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 21 juin 2007 - 26 août 2005 à 17:12
nerix27 Messages postés 86 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 21 juin 2007 - 30 août 2005 à 11:41
Bonjour,
voilà ce que je voudrais faire :

j'ai une listbox avec des items dedans. Lorsque je passe ma souris sur ces items, je voudrais que ça me sélectionne l'item qui se trouve en dessous du curseur...

(Utilité de la chose : je crée un combobox hérité de Control, alors j'ai besoin d'une listbox pour simuler la partie déroulante de mon combobox perso)... :)

Voilà déjà ce que je peux faire :
- Héritage de l'événement MouseMouve du listbox

lb
.MouseMove
+= new MouseEventHandler (lb_move
);
...
protected void lb_move(object sender
, MouseEventArgs e
)


{
...
}

C'est dans ce lb_move que je dois sélectionner l'item en dessous du curseur. Je peux y récupérer les coordonnées du curseur en faisant e.X et e.Y !!! Reste plus qu'à dire à la listbox de changer d'Item avec un p'tit
lb.SelectedItem = ...

Je sais qu'on peut récupérer les coordonnées d'un item en faisant un truc du style : lb.Items[0].Bounds.X et pareil pour Y, mais faire l'inverse je vois pas comment faire...
(si ce n'est faire une jolie boucle sur tous les items de ma liste et voir celui qui intègre le curseur entre ses bornes...mais j'espère qu'on peut faire plus simple)

Pourriez-vous m'aider ???

Merci d'avance pour vos réponses...

2 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
26 août 2005 à 21:51
Salut,

Voici un exemple de base à embellir suivant tes besoins :-)

private void listBox_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
this.listBox.SelectedIndex = GetItemIndexFromPoint(this.listBox, new Point(e.X, e.Y));
}


// Méthode permettant de récupérer l'index de l'item suivant la position du pointeur de souris (en coordonnées client)
private int GetItemIndexFromPoint(ListBox listBox, Point pt)
{
for(int i=0; i<listBox.Items.Count; i++)
{
if (listBox.GetItemRectangle(i).Contains(pt) )
{
return i;
}
}


return -1;
}

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
nerix27 Messages postés 86 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 21 juin 2007 2
30 août 2005 à 11:41
Salut !
Ouais donc à chaque déplacement de souris, faut se faire une boucle...
Je crains que ça soit un peu long comme méthode, mais bon s'il n'y a que ça à faire !

Merci pour ta réponse Coq !
0
Rejoignez-nous