Listview + Autoresize colonnes

[Résolu]
Signaler
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
-
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
-
Bonsoir à tous,



Je cherche à redimensionnemer automatiquement les colonnes de mon
listview. C'est à dire, dans une colonne de mon listview si le titre de
la colonne est plus large que la largeur du plus large des textes de la
colonne alors :



cette_colonne.Width = -1 ; sinon

cette_colonne.Width = -2 ;



Exemple :



ma_colonne1 | ma_colonne2

bonjour | au revoir



ma_colonne1 | ma_colonne2


bonjour comment va tu ? | au revoir



Question : y'a t'il moyen de faire ca simplement sans se taper deux
boucles imbriquées qui risque de faire perdre du temps d'execution en
plus ?

8 réponses

Messages postés
154
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
22 août 2007

ou utiliser un object graphique pour savoir la place que le texte prends avec la font utilisé dans la listview.

Graphics g = new Graphics;

SizeF SizeText =
g.MeasureString(StringToMesure, listView1.Font);
Messages postés
154
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
22 août 2007

un truc du genre devrais fonctionner:


Graphics g =
new Graphics();
SizeF SizeText =
new SizeF();

for
(i = 0 ; i < listView1.Items.Count; i++)
{
ListViewItem item = listView1.Items[i];

for
( y = 0 ; y < item.SubItems.Count ; y++)
{
SizeText = g.MeasureString( item.SubItems[y].Text,
this.listView1.Font);
if( SizeText > g.MeasureString(listView1.Columns[y+1].Text, this
.listView1.Font) )
listView1.Columns[y+1].Width = SizeText.Width;
}
SizeText = g.MeasureString(item.Text,
this.listView1.Font);
if( SizeText > g.MeasureString(listView1.Columns[0].Text, this
.listView1.Font))
listView1.Columns[0].Width = SizeText.Width;
}


}
Messages postés
154
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
22 août 2007

je ne pense pas. tu est obligé de scanner toutes tes lignes pour connaitre la largeur de la plus grande.

mais une seul boucle doit suffir. (je ne connais pas bien les listview).
tu scan par row. et tu regarde toutes tes collonnes en même temps.
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
2
C'est à dire ? Moi je pensais faire une boucle sur les colonnes puis une boucle sur les subitems....
Messages postés
154
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
22 août 2007

je sais pas si j'ai bien compris les listview mais un truc du genre ca ne marcherais pas.... ou dans le genre...



for(i = 0 ; i < listView1.Items.Count; i++)
{
ListViewItem item = listView1.Items[i];
//si j'ai bien compris l'item contient les différentes données des collones)
// donc trouvé le plus grand
if ( item.Text.Length > Col1Bigest)
ColBigest = item.Text.Length;

if (item.SubItems[0].Text.Length > Col2Bigest)
Col2Bigest = item.SubItems[0].Text.Length;
}
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
2
ok , merci de ta réponse
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
je ne vois pas pourquoi tu t'embête à faire une boucle...

car, il me semble qu'avec -2 c'est automatique :D

Sébastien FERRAND
[MVP C#]
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
2
ben pas forcement -2 redimensionne selon la largeur colonne et -1 selon
l'item le plus large de la colonne, la question en faite c'est pour
chaques colonnes est ce que je dois utiliser -1 ou -2...