2009-03-09 25 views
7

È possibile avere righe di altezza variabile all'interno di un oggetto ListView di WinForms in modalità Dettagli?Righe di altezza variabile in WinForms ListView

Non c'è RowHeight o Rows [i] .Altezza proprietà sul controllo per quanto ne so.

Alcuni blog suggeriscono l'implementazione di OwnerDraw, cosa che ho fatto, ma non riesco ancora a trovare nulla che assomigli a proprietà height dai gestori di eventi.

Idealmente, l'altezza della riga viene automaticamente ridimensionata per mostrare il testo multilinea quando necessario.

risposta

2

Un'opzione pensare di:

Per ignorare l'altezza elemento di tutte le righe, creare un ImageList manichino e impostarlo all'altezza desiderata e assegnare al listview base alla vista o afferrare il concetto di http://www.codeproject.com/KB/list/changerowheight.aspx

Se si utilizza ObjectListView, è possibile modificare l'altezza elemento di tutte le righe piuttosto easily. Ma ancora, non c'è modo di modificare l'altezza dell'elemento singolo finché si utilizza ListView.

+0

Va bene come soluzione one-off (se l'altezza è già nota), ma mi piacerebbe che si adattasse alle celle multilinea lunghe. – dbkk

4

Se si utilizza la modalità dettagli, mi chiedo se DataGridView non sarebbe più versatile. Ogni riga ha un'altezza o è possibile utilizzare AutoSizeRowsMode per farlo automaticamente. Vedere MSDN "Ridimensionamento di colonne e righe nel controllo DataGridView di Windows Form".

+1

ho provato il GridView, ma per qualche motivo è * molto * più lento (in VirtualMode con molti elementi). – dbkk

0

Il controllo ListView di Windows (che è incluso nel controllo ListView .NET) non supporta l'altezza delle righe variabili.

Se si rimane con ListView, è necessario disporre di righe di altezza fisse.

1

Il controllo ListBox supporta righe di altezza variabile, ma è stato eseguito tutto da solo.

Impostare la DrawMode a OwnerDrawVariable

Quindi aggiungere

protected override void OnDrawItem(DrawItemEventArgs e) 
{ 
    /* Drawing code here */ 
} 

protected override void OnMeasureItem(MeasureItemEventArgs e) 
{ 
    /* Measure code here */ 
} 

Io uso un listbox proprietario disegnato in un programma denominato Task Reporter per elencare ogni attività l'utente ha immesso. Ogni voce è diversa a seconda della quantità di testo inserita.

+0

Se non è possibile utilizzare DataGridView, questa sembra la tua unica opzione. – cofiem

+0

Questo è per ListBox, non ListView. Un controllo diverso, che non supporta MVC/modalità virtuale. – dbkk

+0

Non ha specificato che aveva bisogno della modalità virtuale, quindi stavo solo suggerendo un controllo alternativo che avrebbe soddisfatto i bisogni. –

0

Se le righe di altezza variabile sono ciò che si desidera, prenderei in considerazione l'utilizzo di DataGridView. Supporta moltissimo le file di altezza variabile (tramite l'uso di stili di cella) ed è molto più facile da usare rispetto al cercare di adattare la vista elenco a fare ciò che si desidera.

2

ObjectListView menzionato nella prima risposta non supporta altezze di riga variabili. Lo dice chiaramente nel suo FAQ. Il sottostante controllo listview di Windows semplicemente non supporta l'altezza della riga variabile. Devi guardare ad altri controlli personalizzati scritti.

Si consiglia di considerare Matthew Hall’s excellent XPTable e its update project, così come il fantastico Outlook-style list di Lee Paul Alexander.

1

Se siete OK con i componenti 3rd party, Better ListView sostiene esattamente questo (ogni elemento ha una proprietà CustomHeight così ognuno può avere diversa altezza):

enter image description here

Problemi correlati