Question

Est-il possible de dessiner des chaînes sur une listview?

J'ai remplacé l'événement OnPaint mais je ne vois aucun changement. J'ai extrait du code dans une liste personnalisée, mais il semble que les gens utilisent p / invoke, etc. Pourquoi?

La liste n'est-elle pas aussi personnalisable que d'autres winforms, comme le contrôle Button?

Je ne vais pas personnaliser sauvagement, il suffit de peindre un peu plus après avoir terminé la peinture standard.

Était-ce utile?

La solution

 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));
        }

    }

Autres conseils

Vous ne pouvez pas simplement remplacer la méthode OnPaint () . Cette méthode ne fait rien dans un ListView. De même, OwnerDrawn vous permet de dessiner chaque cellule, mais ne vous permet pas de peindre le contrôle dans son ensemble.

Utilisez un ObjectListView (un wrapper open source autour de .NET WinForms ListView ) et utiliser son Fonction de superposition . Cela vous permet de faire sans effort quelque chose comme ceci:

 texte sur une ListView

Ceci a été produit par ce code:

this.olv1.OverlayText.Alignment = ContentAlignment.BottomRight;
this.olv1.OverlayText.Text = "Trial version";
this.olv1.OverlayText.BackColor = Color.White;
this.olv1.OverlayText.BorderWidth = 2.0f;
this.olv1.OverlayText.BorderColor = Color.RoyalBlue;
this.olv1.OverlayText.TextColor = Color.DarkBlue;

Définissez le OwnerDraw propriété à true.

Vous pouvez ensuite gérer le DrawItem , DrawSubItem , et les événements DrawColumnHeader éléments spécifiques du ListView.

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