Pregunta

Utilizando C # .NET 2.0, tengo un ListView dibujado por el propietario donde estoy anulando los eventos OnDrawColumnHeader, OnDrawItem y OnDrawSubitem. Si configuro la propiedad Ver en Detalles en tiempo de diseño, todo funciona a la perfección y puedo cambiar la propiedad Ver y todos los modos de visualización se muestran como deberían (no estoy usando la vista de mosaico). Sin embargo, si comienzo en cualquier otra Vista, las vistas Lista y Detalles están en blanco.

Sé que probablemente querrás ver el código, pero hay mucho, así que dudo en publicarlo, pero puedo hacerlo si es necesario. Tengo más curiosidad si alguien ha visto esto antes y / o podría tener una idea de cómo solucionarlo. La propiedad Ver será una configuración guardada por el usuario, por lo que no siempre podré comenzar en la vista Detalles por defecto.

¿Fue útil?

Solución

La vista de lista de WinForms es principalmente una capa de abstracción de la parte superior del control de Windows real, por lo que hay aspectos de su comportamiento que, bueno, contraintuitivo es una forma educada de poner las cosas.

Recuerdo vagamente, de cuando en mis días como desarrollador de Delphi, cuando eres el propietario dibujando un ListView, los subelementos del control no se completan a menos que tu vista de la lista esté en " Detalles " modo cuando carga los elementos.

Cosas para probar ...

... obliga al control WinForms a recrear el identificador de ventanas subyacente después de cambiar el estilo de visualización. Si la memoria funciona, DestroyHandle () es el método que desea.

... suponiendo que tenga un " Actualizar " en su aplicación para recargar los datos, ¿funcionan las cosas correctamente cuando actualiza después de cambiar el estilo de visualización?

... si todo lo demás falla, pide prestado o roba una copia del clásico de Charles Petzolds en la programación de Windows.

Otros consejos

O SubItems no se agregaron o no agregó ninguna columna. Ese es mi sentimiento inicial.

Si lo configura correctamente con el diseñador, solo ingrese al código del diseñador generado y vea qué código emitió Visual Studio para que funcione correctamente. Luego simplemente emula ese código.

Sin su código, no se puede decir mucho, pero DrawColumnHeader solo se llama cuando la propiedad OwnerDraw se establece en true. No estoy seguro de si se establece automáticamente en verdadero o falso según la propiedad Ver, pero vale la pena intentarlo. Así que asegúrese de que OwnerDraw esté establecido en verdadero antes de iniciar su aplicación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top