2009-08-10 12 views

Répondre

84

Vous avez donné la réponse: -2 va adapter la taille de la colonne à la longueur du texte dans l'en-tête de la colonne, -1 s'auto-dimensionnera à l'élément le plus long de la colonne. All according to MSDN. Notez cependant que dans le cas de -1, vous devrez définir la largeur de la colonne après avoir ajouté le (s) élément (s). Ainsi, si vous ajoutez un nouvel élément, vous devrez également affecter la propriété width de la colonne (ou des colonnes) que vous souhaitez importer automatiquement en fonction des données du contrôle ListView.

19

J'ai fait un programme qui a effacé et rempli mon listview plusieurs fois. Pour une raison quelconque, à chaque fois que j'ai ajouté des colonnes avec largeur = -2, j'ai rencontré un problème avec la première colonne étant trop longue. Ce que j'ai fait pour réparer cela a été créer cette méthode.

private void ResizeListViewColumns(ListView lv) 
{ 
    foreach(ColumnHeader column in lv.Columns) 
    { 
     column.Width = -2; 
    } 
} 

La grande chose à propos de cette méthode est que vous pouvez pratiquement la mettre n'importe où pour redimensionner toutes vos colonnes. Il suffit de passer dans votre ListView.

+1

cela définira la largeur à la largeur du dernier élément dans votre ListView – Qsiris

+0

J'utilise votre code mais si je n'ai qu'une seule colonne dans ma liste, chaque fois que je reçois une barre de défilement horizontale.S'il y a au moins deux colonnes, le code fonctionne bien. Savez-vous d'où vient ce comportement? – prototype0815

71

Utilisez ceci:

yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); 
yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); 

de here

+6

Mais que faire si vous voulez le maximum de l'en-tête ou la largeur des données? Sans scintillement? – toddmo

1

expansion un peu sur la réponse de Fredrik, si vous voulez régler à la volée par exemple la largeur auto-resize de la colonne: réglage de l'automobile de la première colonne largeur -size à 70:

myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.None); 
myListView.Columns[0].Width = 70; 
myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); 
0

Cette solution va d'abord redimensionner les colonnes en fonction des données de la colonne, si la largeur est redimensionnée smalle r taille de l'en-tête, il va redimensionner les colonnes pour au moins s'adapter à l'en-tête. C'est une solution assez laide, mais cela fonctionne.

lstContacts.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); 
colFirstName.Width = (colFirstName.Width < 60 ? 60 : colFirstName.Width); 
colLastName.Width = (colLastName.Width < 61 ? 61 : colLastName.Width); 
colPhoneNumber.Width = (colPhoneNumber.Width < 81 ? 81 : colPhoneNumber.Width); 
colEmail.Width = (colEmail.Width < 40 ? 40 : colEmail.Width); 

lstContacts est le ListView. colFirstName est une colonne, où 60 est la largeur requise pour s'adapter au titre. Etc

0

Je crois que l'auteur était à la recherche d'une méthode équivalente via l'EDI qui générerait le code derrière et assurez-vous que tous les paramètres sont en place, etc. Nous avons trouvé ce à partir de MS:

Creating Event Handlers on the Windows Forms Designer

venant d'un arrière-plan VB moi-même, ce que je cherchais, voici la version brève pour le clic négatif:

  1. Cliquez sur le formulaire ou un contrôle qui y Vous souhaitez créer un gestionnaire d'événements pour.
  2. Dans la fenêtre Propriétés, cliquez sur le bouton Événements
  3. Dans la liste des événements disponibles, cliquez sur l'événement pour lequel vous souhaitez créer un gestionnaire d'événements.
  4. Dans la zone à droite du nom de l'événement, tapez le nom du gestionnaire et appuyez sur ENTRER