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

Signaler
Messages postés
86
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
21 juin 2007
-
Messages postés
86
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
21 juin 2007
-
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

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
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#
Messages postés
86
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
21 juin 2007
2
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 !