Mettre en surbrillance une ligne d'une listview

Résolu
jytest Messages postés 314 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014 - 19 avril 2009 à 19:25
jytest Messages postés 314 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014 - 20 avril 2009 à 13:31
Bonsoir à tous,

Je ne maîtrise pas les listview...
Me revoilà donc avec les listview...

J'ai une listview avec 4000 lignes.
Elle est avec 4 colonnes.
A l'ouverture de cette listview, vu la hauteur
que j'ai déterminée, je ne vois que 4 lignes simultanément.

Par une richtextbox, j'introduis un contenu de la 1re colonne...
Par boucle, j'arrive à trouver l'index de cette data dans la listview.

Mais comment mettre cette ligne (par exemple, la ligne 1500) visible en tête de liste, et en surbrillance, exactement comme si j'avais cliqué sur une ligne de la listview ???

Merci à tous de votre précieuse aide.
Jean-Yves

9 réponses

jytest Messages postés 314 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014
20 avril 2009 à 13:31
Voilà, j'ai la solution !!!

For i = indClient To 1 Step -1
If UCase(Left(ListView1.ListItems(i), Len(txtRecherche))) = _
UCase(txtRecherche) Then
ListView1.ListItems(i + 3).Selected = True
ListView1.ListItems(i + 3).EnsureVisible
ListView1.ListItems(i).Selected = True
ListView1.ListItems(i).EnsureVisible
End If
Next i

Il fallait :
- d'abord rechercher dans la listview, en démarrant du dernier élément...
- ensuite, fausser les espions, en demandant de d'abord visuliser 3
éléments plus loin (vu que ma liste visible comprend 4 lignes), et puis de
revisualiser le véritable élément à mettre en surbrillance...

Il manque juste un test de fin de liste...
3
jytest Messages postés 314 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014
19 avril 2009 à 22:28
J'ai trouvé sur un autre forum et site ceci :
ListView1.ListItems(i).Selected = True
ListView1.ListItems(i).EnsureVisible

Cela fonctionne à merveille, sauf que la ligne 1500 est en blanc, et malheureusement pas en bleu de surbrillance.

Comment faire, svp
0
jytest Messages postés 314 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014
19 avril 2009 à 23:07
Alors, maintenant, grâce à ces 2 lignes de codes, il me faudrait passer la ligne 1500 en couleur rouge...

Qui peut m'aider ???

Merci d'avance.
0
cnt Messages postés 219 Date d'inscription lundi 21 novembre 2005 Statut Membre Dernière intervention 20 décembre 2010 1
20 avril 2009 à 00:55
salut jytest
il te faut attribuer la couleur à chaque colonne de la ligne voulue, comme suite.

For i = 1 To 4
     ListView1.ListItems(1500).ListSubItems(i).ForeColor = RGB(0,0,255)
Next i
 
Les indices de colonnes sont peut-être ( 0 à 3 ) et non pas ( 1 à 4 ), je ne m'en souviens pas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
20 avril 2009 à 01:06
Salut,
Pour sélectionner une ligne tout en la remontant si elle se trouve en bas de la liste,une seule ligne suffit:
ListView1.ListItems(i).Selected = ListView1.ListItems(i).EnsureVisible

<hr />

[] Ce qui va sans dire. va mieux en le disant.

<hr />
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
20 avril 2009 à 01:11
cnt,
les subitems commencent à 1 à partir de la deuxième colonne.
Pour la première, il faudra penser à la faire en dehors de la boucle.
ListView1.ListItems(1500).ForeColor = RGB(0,0,255)

<hr />

[] Ce qui va sans dire. va mieux en le disant.

<hr />
0
jytest Messages postés 314 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014
20 avril 2009 à 03:14
ok, merci à tous déjà.

Je me suis mal exprimé...
Ce que je veux, c'est mettre un fond rouge sur la ligne 1500.

A l'aide svp
0
jytest Messages postés 314 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014
20 avril 2009 à 03:22
Pourquoi
ListView1.ListItems(i).Selected = ListView1.ListItems(i).EnsureVisible
ne fonctionne pas chez moi...
La ligne sélectionnée reste en bas...

Pourquoi
ListView1.ListItems(1500).ForeColor = RGB(0,0,255)
For i = 1 To 3
ListView1.ListItems(1500).ListSubItems(i).ForeColor = RGB(0,0,255)
Next i
ne fonctionne pas non plus chez moi...
Les caractères reste en noir...

Pourquoi? Pourquoi?
A l'aide, svp
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
20 avril 2009 à 07:58
A ma connaissance,Il y a bien des codes pour changer le fond d' une seule ligne,mais ils sont très ardus.Crois moi, le jeu ne vaut pas la chandelle !
Désolé, j' ai pas d' exemple précis.Tu peux toujours faire une recherche sur le sujet.


Pour le reste,ta ListView est-elle style Report ? Car
ListView1.ListItems(1500).Selected = ListView1.ListItems(1500).EnsureVisible
Fonctionne parfaitement bien.


Explication:
ListView1.ListItems(1500).Selected =True
Pas de problème,la ligne 1500 sera sélectionnée.
Seulement, cela ne suffit pas.
Si elle est en bas de la liste et pas visible, elle le restera.
Il y a bien la methode EnsureVisible.Le problème c' est que tu ne peux pas
écrire par exemple:
ListView1.ListItems(1500).EnsureVisible=True
ou quelque chose du genre.
A mon avis,c' est  elle qu' elle doit nous renvoyer quelque chose.
Je ne saurai dire ni quoi ni comment.
Tout ce que je sais c' est qu'il faut qu' au moment de la selection, on s' assure que la ligne en question reste visible.D' ou cette ecriture.
ListView1.ListItems(1500).Selected = ListView1.ListItems(1500).EnsureVisible.

Voilà presque tout !
       
<hr />


[] Ce qui va sans dire. va mieux en le disant.


<hr />
0
Rejoignez-nous