Comme vous l'aurez compris, la listview n'est volontairement pas scrollable.
sa longueur s'adapte au nombre de fichiers presents dans le "Userfilepath"(defini dans appconfig). (un peu de logique mathematique)
J'aurais voulu faire de meme pour la largeur mais pour cela , il me faut determiner le nom de fichier le plus long dans cette liste
et c'est la que le problème se pose.
dans l'etat actuel des choses, si j ai un nom de fichier de 3 lettres, la largeur est 30px (la ca va encore)si j ai un nom de fichier de 25 lettres, j'ai une largeur de 250px ( et la ca va plus du tout....)
Comment faire pour trouver le nom de fichier le plus long afin de definir la largeur de la listview?
PS: Je sais que c'est le bordel dans mon code..... si vous avez des remarques ou des conseils, je suis preneur pour ca aussi....
Je ne sais pas si tu connais cette notation A?B:C, mais ça veut dire si A, retourne B, autrement C.
Une fois que tu auras terminé ta boucle, tu auras le nombre de caractères maximum.
Ton code n'est pas si bordélique. J'ai vu bien pire fait par des gens qui se prétendent professionnels.
Par contre, tu peux exécuter toute cette partie du code après ta boucle, il est inutile de le refaire à chaque fois :
la première instruction ne sert à rien.
Pour la hauteur de la liste, pourquoi la redimensionner à chaque passage? Sors le code de la boucle for.
Pareil pour Usrselectlist.Scrollable = false
;
Sinon, pour répondre à ta question, tu peux mesurer la longueur de chaque item de ta liste et ainsi déterminer la chaine la plus longue. Utilise ça pour mesurer. Compter le nombre de caractères des items n'est pas assez, car les caractères peuvent avoir différentes largeurs.
Mets ça après ta boucle for:
Graphics g = Graphics.FromHwnd(Usrselectlist.Handle);
float maxLen = 0;
foreach (ListViewItem lvi in Usrselectlist.Items)
{
SizeF s = g.MeasureString(lvi.Text, Usrselectlist.Font);
if (s.Width > maxLen)
maxLen = s.Width;
}
Usrselectlist.Width = (int)maxLen;
(tu auras besoin d'include System.Drawing)
Tu pourrais même mesurer les chaînes dans la première boucle for pour ne pas avoir à faire un 2e passage.
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 4 déc. 2008 à 10:52
Salut
Ca dois sintiller ton programme ??
Il faut évite de mettre du code
dans les evenements de la souris cet evenement est lancé a chaque fois que ta souris passe sur le control
(heureusement que tu n'attaques pas une base de données tu la mettrais par terre :-) avec des requetes toutes les x secondes
Toxic64
Messages postés13Date d'inscriptionjeudi 13 novembre 2008StatutMembreDernière intervention25 juin 2009 4 déc. 2008 à 19:47
Je ne connaissait pas cette syntaxe.je vais essayer ca des ce soir...
en tout cas merci pour cette reponse qui en plus de résoudre mon problème ajoute a mes connaissances.