Pergunta

É possível tirar algumas cordas em um listview?

Eu substituído o evento OnPaint, mas eu não vejo qualquer mudança. I check-out algum código em listview costume, mas parece que as pessoas estão usando p / invoke, etc. Por que?

Não é lista como personalizável como outros winforms, como o controle de botão?

Não vou personalizar descontroladamente, apenas pintar um pouco mais depois de pronto a pintura padrão.

Foi útil?

Solução

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

    }

Outras dicas

Você não pode simplesmente substituir o método OnPaint(). Esse método não faz nada em um ListView. Da mesma forma, OwnerDrawn permite costume desenhar cada célula, mas não permite que você pintar sobre o controle como um todo.

Use um ObjectListView (um wrapper de código aberto em torno .NET WinForms ListView ) e usar a sua Overlay recurso . Isso permite que você facilmente fazer algo como isto:

text durante um ListView

Este foi produzido por este código:

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;

Defina a OwnerDraw propriedade para true.

Você pode, então, lidar com a DrawItem , DrawSubItem , e DrawColumnHeader eventos para desenhar elementos específicos do ListView.

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