Pergunta

Usando C # .NET 2.0, eu tenho um ListView desenhados pelo proprietário onde eu estou substituindo o OnDrawColumnHeader, eventos OnDrawItem e OnDrawSubitem. Se eu definir a propriedade Vista para detalhes em tempo de design, tudo funciona muito bem e eu posso mudar a propriedade View e todos os modos de visualização exibir como deveriam (eu não estou usando vista Tile). No entanto, se eu começar em qualquer outra vista, tanto os pontos de vista lista e os detalhes estão em branco.

Eu sei que você provavelmente vai querer ver o código, mas há um monte de que, assim que eu estou hesitante em postar muito, mas pode, se necessário. Estou mais curioso para saber se alguém tem visto isso antes, e / ou pode ter uma idéia de como corrigi-lo. The View propriedade será uma configuração salva pelo usuário, de modo que não será sempre capaz de iniciar em Detalhes vista por padrão.

Foi útil?

Solução

O WinForms ListView é principalmente uma camada de abstração do topo do controle real do Windows, de forma que há aspectos do seu comportamento que são, assim, contra-intuitiva é uma maneira educada de colocar as coisas.

Eu tenho uma vaga lembrança, de volta em meus dias como um desenvolvedor Delphi, que quando você está desenhando proprietário de um ListView, os subitens do controle não são realmente povoada a menos que seu Listview está no modo de "Detalhes" quando você carga os itens.

As coisas para tentar ...

... forçar os WinForms controlar para recriar as janelas subjacentes lidar depois de alterar o estilo de exibição. Se a memória serve, DestroyHandle () é o método que quiser.

... supondo que você tem um "Atualizar" no seu aplicativo para recarregar os dados, fazer as coisas funcionam corretamente quando você atualizar depois de mudar o estilo de exibição?

... se tudo mais falhar, borrow mendigar ou roubar uma cópia de Charles' Petzolds clássico sobre janelas de programação.

Outras dicas

De qualquer SubItems não são adicionados, ou você não adicionar quaisquer colunas. Esse é o meu sentimento inicial.

Se você configurá-lo corretamente usando o designer, basta ir para o código do designer gerado e ver o código foi emitida pelo Visual Studio para obtê-lo para a direita trabalho. Em seguida, basta imitar esse código.

Withour seu código, não há nada muito pode ser dito, mas DrawColumnHeader só é chamado quando OwnerDraw propriedade é definida como true. Não tenho certeza se ele é definido automaticamente para o verdadeiro eo falso, dependendo da propriedade Ver mas vale a pena dar uma tentativa. Portanto, certifique-OwnerDraw é definida como true antes de lançar a sua aplicação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top