2009-03-09 15 views
7

¿Es posible tener filas de altura variable dentro de un ListView de WinForms en modo Detalles?Filas de altura variable en WinForms ListView

No hay propiedad RowHeight o Filas [i] .Height en el control hasta donde yo sé.

Algunos blogs sugieren la implementación de OwnerDraw, lo que hice, pero todavía no puedo encontrar nada que se parezca a la propiedad de altura dentro de los controladores de eventos.

Idealmente, la altura de la fila sería de tamaño automático para mostrar texto de líneas múltiples cuando sea necesario.

Respuesta

2

Una opción para pensar:

Para sustituir la altura elemento de todas las filas, cree un ImageList ficticia y la pusieron a la altura deseada y asignarlo a la vista de lista dependiendo de la vista o comprender el concepto de http://www.codeproject.com/KB/list/changerowheight.aspx

Si usa ObjectListView, puede cambiar la altura del artículo de todas las filas bastante easily. Pero aún así, no hay forma de cambiar la altura del elemento individual siempre que use ListView.

+0

Eso es bueno como una solución única (si la altura ya se conoce), pero me gustaría que se ajuste a celdas largas de líneas múltiples. – dbkk

4

Si está utilizando el modo de detalles, me pregunto si DataGridView no sería más versátil. Cada fila tiene una Altura, o puede usar AutoSizeRowsMode para hacerlo automáticamente. Consulte MSDN "Cambiar el tamaño de columnas y filas en el control DataGridView de Windows Forms".

+1

He probado el GridView, pero por alguna razón es * mucho * más lento (en VirtualMode con muchos elementos). – dbkk

0

El control ListView de Windows (que está envuelto por el control .NET ListView) no admite alturas de fila variables.

Si se queda con el ListView, necesitará filas de altura fija.

1

El control ListBox admite filas de altura variable, pero usted mismo ha hecho todo el dibujo.

Establecer la DrawMode a OwnerDrawVariable

A continuación, agregue

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

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

utilizo un cuadro de lista dibujado por el propietario en un programa llamado Grupo de reportero a la lista cada tarea que el usuario introduce. Cada entrada es diferente según la cantidad de texto que se ingrese.

+0

Si no es posible usar DataGridView, esta parece ser su única opción. – cofiem

+0

Esto es para ListBox, no ListView. Un control diferente, que no admite MVC/modo virtual. – dbkk

+0

No especificó que necesitaba el modo virtual, por lo que solo sugería un control alternativo que satisfaga las necesidades. –

0

Si las filas de altura variable son lo que desea, consideraría utilizar DataGridView en su lugar. Es muy compatible con filas de altura variable (mediante el uso de estilos de celda) y es mucho más fácil de usar que tratar de calzar la vista de lista para hacer lo que desee.

2

El ObjectListView mencionado en la primera respuesta no admite alturas de fila variables. Dice esto claramente en su FAQ. El control de lista de Windows subyacente simplemente no admite altura de fila variable. Tienes que mirar a otros controles escritos personalizados.

Es posible que desee considerar Matthew Hall’s excellent XPTable y its update project, así como Lee Paul Alexander's fantastic Outlook-style list.

1

Si estás bien con componentes de 3 ª parte, Better ListView apoya exactamente esto (cada elemento tiene una propiedad CustomHeight por lo que cada uno puede tener diferentes alturas):

enter image description here

Cuestiones relacionadas