Domanda

Usando C # .NET 2.0, ho un ListView disegnato dal proprietario in cui sovrascrivo gli eventi OnDrawColumnHeader, OnDrawItem e OnDrawSubitem. Se imposto la proprietà Visualizza su Dettagli in fase di progettazione, tutto funziona alla perfezione e posso cambiare la proprietà Visualizza e tutte le modalità di visualizzazione vengono visualizzate come dovrebbero (non sto usando la vista affiancata). Tuttavia, se inizio in un'altra vista, entrambe le viste Elenco e Dettagli sono vuote.

So che probabilmente vorrai vedere il codice, ma ce n'è molto, quindi sono titubante a postare così tanto, ma posso, se necessario. Sono più curioso di sapere se qualcuno l'ha già visto prima e / o potrebbe avere un'idea di come risolverlo. La proprietà Visualizza sarà un'impostazione salvata dall'utente, quindi non sarò sempre in grado di iniziare nella vista Dettagli per impostazione predefinita.

È stato utile?

Soluzione

Il ListView di WinForms è principalmente uno strato di astrazione della parte superiore dell'attuale controllo di Windows, quindi ci sono aspetti del suo comportamento che sono, beh, controintuitivi è un modo educato di mettere le cose.

Ho un vago ricordo, ai miei tempi come sviluppatore di Delphi, che quando sei il proprietario che disegna un ListView, i componenti secondari del controllo non sono effettivamente popolati a meno che il tuo Listview non sia in " Dettagli " modalità quando carichi gli articoli.

Cose da provare ...

... impone al controllo WinForms di ricreare l'handle di Windows sottostante dopo aver modificato lo stile di visualizzazione. Se la memoria serve, DestroyHandle () è il metodo che desideri.

... supponendo che tu abbia un " Aggiorna " nell'applicazione per ricaricare i dati, le cose funzionano correttamente quando si aggiorna dopo aver modificato lo stile di visualizzazione?

... se tutto il resto fallisce, chiedi in prestito o ruba una copia del classico di Charles Petzolds sulla programmazione di Windows.

Altri suggerimenti

Non sono stati aggiunti elementi secondari o non sono state aggiunte colonne. Questa è la mia sensazione iniziale.

Se lo si configura correttamente utilizzando il designer, basta andare nel codice designer generato e vedere quale codice è stato emesso da Visual Studio per farlo funzionare correttamente. Quindi basta emulare quel codice.

Senza il tuo codice, non c'è molto da dire ma DrawColumnHeader viene chiamato solo quando la proprietà OwnerDraw è impostata su true. Non sono sicuro che sia automaticamente impostato su true e false a seconda della proprietà View, ma vale la pena provare. Quindi assicurati che OwnerDraw sia impostato su true prima di avviare l'applicazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top