2011-09-14 3 views
0

J'ai un formulaire Win avec deux colonnes et je voulais avoir la largeur de la 1ère colonne 2/3 de la taille de la taille ListView et la deuxième colonne 1/3. Je voulais être en mesure de remplir le ListView avec les 2 colonnes et être en mesure de réduire et de développer pour laisser de la place pour une barre de défilement verticale si les éléments ListView passe sous le bas de la boîte. Je suis venu avec ce code, mais cela seulement prendra effet lorsque la barre de défilement est là, et même alors, il élargit légèrement les colonnes de sorte qu'une barre de défilement horizontale est créée que je ne veux pas. Toute aide est très appréciée.Taille de colonne ListView

private void AddColumn() 
{ 
    listView1.View = View.Details; 
    listView1.Columns.Add("Item"); 
    listView1.Columns.Add("Date Added"); 
    int itemColumnWidth = listView1.Width - SystemInformation.VerticalScrollBarWidth; 
    listView1.Columns[0].Width = itemColumnWidth/3 * 2; 
    listView1.Columns[1].Width = itemColumnWidth/3; 
} 

Répondre

1

Ce que vous pouvez faire est de redimensionner la première colonne à 2/3 largeur et définir la deuxième colonne pour étendre à la largeur restante.

La méthode d'expansion de la deuxième colonne de largeur restante est expliqué dans la réponse à cette question: ListView Final Column Autosize creates scrollbar

1

J'ai toujours eu ce problème. Vous devez toujours soustraire juste un peu plus d'espace pour la barre de défilement. Au moins soustraire 4 pixels supplémentaires ou pour rester en sécurité soustraire 8px à 10px. Personne ne remarquera le petit espace supplémentaire.

Je suppose que quelqu'un n'a pas bien compris son arithmétique lorsqu'il a implémenté des listes de contrôle ... Il doit y avoir un remplissage interne de colonnes. La conception semble être axée sur la création d'espace supplémentaire au besoin plutôt que sur l'ajustement des colonnes à l'écran. Pensez à Windows Explorer: les colonnes ne se redimensionnent jamais à la taille de la fenêtre, et il y a toujours des barres de défilement désagréables. Nous voulons tous que notre listview ressemble à la liste d'erreurs propre à Visual Studio, mais que le contrôle semble être une implémentation différente qui garantit toujours l'ajustement des colonnes à la largeur du contrôle.

+0

Cette méthode fixe fonctionnera-t-elle bien si l'écran est réglé sur un DPI différent? C'est à dire. si les bordures sont beaucoup plus grandes que 2 pixels ... Une méthode plus sûre pourrait être de trouver un moyen d'exclure les bordures en fonction des paramètres système actuels au lieu de supposer des constantes. –

+0

Merci pour vos commentaires, je pense que je vais donner une réponse à James –

+1

Au lieu d'utiliser listView1.Width vous devriez utiliser listView1.ClientSize.Width. Ensuite, vous n'avez pas besoin de 4 pixels supplémentaires. Fonctionne parfaitement, en ajoutant 1 pixel à la largeur calculée ajoute la barre de défilement horizontale de sorte qu'il est juste sur la cible. – Anlo