6
votes

ListView personnalisé dans Winforms?

est-il possible de dessiner des chaînes sur une liste de liste?

J'ai remplacé l'événement Onpaint mais je ne vois aucun changement. J'ai vérifié du code sur Custom ListView, mais il semble que des personnes utilisent p / invoke, etc. Pourquoi?

n'est pas une liste aussi personnalisable que d'autres Winforms, comme le contrôle des boutons?

Je ne vais pas personnaliser sauvagement, peignez simplement un peu plus après que cela soit fait la peinture standard.


0 commentaires

3 Réponses :


6
votes
 class MyCustomlistView : ListView
    {
        public MyCustomlistView()
            : base()
        {
            SetStyle(ControlStyles.UserPaint, true);
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            e.Graphics.DrawString("This is a custom string", new Font(FontFamily.GenericSerif, 10, FontStyle.Bold), Brushes.Black, new PointF(0, 50));
        }

    }

1 commentaires

Cela ne fonctionne pas avec une liste de réception. Cela fait simplement que la listeView ne rien dessiner.



1
votes

Définir le OwnerDraw propriété pour true.

Vous pouvez ensuite gérer le Drawitem < / a>, DrawsUntem , et DrawColumnheader événements à dessiner sur Éléments spécifiques de la liste de liste.


0 commentaires

10
votes

Vous ne pouvez pas simplement remplacer la méthode Onpaint () . Cette méthode ne fait rien dans une liste de réception. De même, OwnerDrawn vous permet de dessiner personnalisé chaque cellule, mais ne vous laissez pas peindre sur le contrôle dans son ensemble.

Utilisez un ObjectListView (une enveloppe open source autour de .NET WinForms Listview ) et utilisez son fonction de superposition . Qui vous permet de faire sans effort quelque chose comme ceci:

 Texte sur une liste de réception

Ceci a été produit par ce code: xxx


0 commentaires