[C#] Sélection d'un item d'une listbox en passant la souris dessus
nerix27
Messages postés86Date d'inscriptionjeudi 23 octobre 2003StatutMembreDernière intervention21 juin 2007
-
26 août 2005 à 17:12
nerix27
Messages postés86Date d'inscriptionjeudi 23 octobre 2003StatutMembreDernière intervention21 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)
// 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;
}
}
nerix27
Messages postés86Date d'inscriptionjeudi 23 octobre 2003StatutMembreDernière intervention21 juin 20072 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 !