Question

À l’aide de C # .NET 2.0, j’ai une ListView dessinée par le propriétaire dans laquelle je remplace les événements OnDrawColumnHeader, OnDrawItem et OnDrawSubitem. Si je règle la propriété View sur Details au moment du design, tout fonctionne à merveille et je peux changer la propriété View et tous les modes d'affichage s'affichent comme ils le devraient (je n'utilise pas l'affichage mosaïque). Toutefois, si je commence dans une autre vue, les vues Liste et Détails sont vides.

Je sais que vous voudrez probablement voir du code, mais il y en a beaucoup, alors j'hésite à poster autant, mais je peux le faire si nécessaire. Je suis plus curieux si quelqu'un a déjà vu cela auparavant et / ou pourrait avoir une idée de la façon de le réparer. La propriété View sera un paramètre enregistré par l'utilisateur. Par conséquent, je ne pourrai pas toujours commencer par défaut dans la vue Détails.

Était-ce utile?

La solution

La liste WinForms est principalement une couche d’abstraction située au sommet du contrôle Windows, de sorte que certains aspects de son comportement sont, bien sur, contre-intuitifs est une manière polie de présenter les choses.

Je me souviens vaguement, à l'époque où j'étais développeur Delphi, que lorsque vous êtes en train de dessiner un objet ListView par le propriétaire, les sous-éléments du contrôle ne sont pas renseignés, à moins que votre vue List ne se trouve dans "Détails". mode lorsque vous chargez les éléments.

Choses à essayer ...

... force le contrôle WinForms à recréer le handle de fenêtre sous-jacent après le changement de style d'affichage. Si la mémoire est utile, DestroyHandle () est la méthode que vous souhaitez.

... en supposant que vous avez un " Refresh " dans votre application pour recharger les données, les choses fonctionnent-elles correctement lorsque vous actualisez après avoir modifié le style d'affichage?

... si tout échoue, priez d'emprunter ou de voler une copie du classique de Charles 'Petzolds sur la programmation Windows.

Autres conseils

Les sous-éléments ne sont pas ajoutés ou vous n'avez ajouté aucune colonne. C'est mon sentiment initial.

Si vous le configurez correctement à l'aide du concepteur, entrez simplement dans le code généré par le concepteur et voyez quel code a été émis par Visual Studio pour le faire fonctionner correctement. Ensuite, émulez ce code.

Sans votre code, on ne peut rien en dire, mais DrawColumnHeader n’est appelé que lorsque la propriété OwnerDraw est définie sur true. Vous ne savez pas s'il est automatiquement défini sur true et false selon la propriété View, mais cela vaut la peine d'essayer. Assurez-vous donc que OwnerDraw est défini sur true avant de lancer votre application.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top