2009-08-10 19 views

risposta

84

Hai dato la risposta: -2 effettuerà l'autosize della colonna alla lunghezza del testo nell'intestazione della colonna, -1 eseguirà l'autoscatto sull'elemento più lungo nella colonna. All according to MSDN. Si noti però che nel caso di -1, sarà necessario impostare la larghezza della colonna dopo aver aggiunto gli articoli. Quindi, se aggiungi un nuovo elemento, dovrai anche assegnare la proprietà width della colonna (o delle colonne) che vuoi automatizzare in base ai dati nel controllo ListView.

19

Ho creato un programma che ha cancellato e riempito la mia listview più volte. Per qualche motivo ogni volta che ho aggiunto colonne con width = -2 ho riscontrato un problema con la prima colonna troppo lunga. Quello che ho fatto per risolvere questo problema è stato creare questo metodo.

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

La cosa grandiosa di questo metodo è che puoi praticamente metterlo ovunque per ridimensionare tutte le tue colonne. Basta inserire il numero ListView.

+1

questo imposterà la larghezza alla larghezza dell'ultimo elemento nella ListView – Qsiris

+0

io uso il codice ma se ho una sola colonna nel mio listview, ogni volta ottengo una barra di scorrimento orizzontale.Se ci sono almeno due colonne il codice funziona bene. Sai da dove viene questo comportamento? – prototype0815

71

Utilizzare questa:

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

da here

+6

Ma cosa succede se si desidera il massimo dell'intestazione o la larghezza dei dati? Senza sfarfallio? – toddmo

1

Espansione di un po 'la risposta di Fredrik, se si desidera impostare la larghezza ridimensionamento automatico della colonna al volo ad esempio: l'impostazione automatica della prima colonna larghezza -size a 70:

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

Questa soluzione prima ridimensionare le colonne in base a dati di colonna, se la larghezza è ridimensionata smalle r della dimensione dell'intestazione, ridimensiona le colonne per adattarle almeno all'intestazione. Questa è una soluzione piuttosto brutta, ma funziona.

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 è il ListView. colFirstName è una colonna, dove 60 è la larghezza richiesta per adattarsi al titolo. Ecc

0

Credo che l'autore era alla ricerca di un metodo equivalente tramite l'IDE che avrebbe generato il codice dietro e assicurarsi che tutti i parametri erano al loro posto, ecc trovato questo da MS:

Creating Event Handlers on the Windows Forms Designer

Provenendo da un ambiente VB me stesso, questo è quello che cercavo, ecco la versione breve per il clic avversa:

  1. Fare clic sul form o controllo che y vuoi creare un gestore di eventi per.
  2. Nella finestra Proprietà, fare clic sul pulsante Eventi
  3. Nell'elenco di eventi disponibili, fare clic sull'evento per il quale si desidera creare un gestore eventi.
  4. Nella casella a destra del nome dell'evento, digitare il nome del gestore e premere INVIO