2009-11-29 20 views
7

ListView başlıklarının arka plan rengini nasıl değiştirirsiniz?Winform Listesinin arka plan rengini değiştirmeView başlıkları

+1

Boya olayını geçersiz kılarak özel çizim uygulamanız gerekecek. Paint yöntemini geçersiz kılan –

+0

ListView'de hiçbir şey yapmaz. @David'in önerdiği OwnerDraw mekanizmasını kullanmanız gerekir. Bunu yaptığınızda, başlık tasarımınızdan tüm stilleri kaldırdığınızı unutmayın - sıcak öğe yok, sıralama göstergesi yok, degrade arka planı yok. – Grammarian

cevap

7

Bunu, liste görünümü için OwnerDraw özelliğini true olarak ayarlayarak yapabilirsiniz.

Bu, liste görünümünün çizim olayları için olay işleyicileri sağlamanıza olanak tanır.

Aşağıda

MSDN hakkında ayrıntılı bir örnek vardır kırmızıya başlık rengini ayarlamak için bazı örnek kod:

private void listView1_DrawColumnHeader(object sender, 
              DrawListViewColumnHeaderEventArgs e) 
    { 
     e.Graphics.FillRectangle(Brushes.Red, e.Bounds); 
     e.DrawText(); 
    } 

sanırım (ama yanlış kanıtlanabilir mutluyum) OwnerDraw setiyle o

private void listView1_DrawItem(object sender, 
            DrawListViewItemEventArgs e) 
    { 
     e.DrawDefault = true; 
    } 

kesinlikle ma yapmadıysanız: aşağıda gösterildiği gibi true, ayrıca varsayılan uygulamaları olan diğer beraberlik olaylara işleyici vermeniz gerekecektir Liste görünümü yapmak için neredeyim ki o olmadan öğeleri çizin.

+0

Bir uyarı kelimesi olarak, bunu anlamak için bir saatten fazla sürdüğümden, drawcolumnheader'ın içine bir MSGBOX komutu koyma! Bu vb.net kadar askıda kalıyor - aksi takdirde iyi çalıştı – cardmagik

5

Bu partiye biraz geç olduğunu biliyorum ama bu yazıyı hala gördüm ve bu bana yardımcı olurdu. Burada kodunun ilk bit koymak ne olursa olsun sınıf ile

public Form() 
{ 
    InitializeComponent(); 
    *CLASS NAME*.colorListViewHeader(ref myListView, *SOME COLOR*, *SOME COLOR*); 
} 

Sadece * SINIFI ADI yerine david Ardından formu yapıcı bu çağrı

using System.Windows.Forms; 
using System.Drawing; 

//List view header formatters 
public static void colorListViewHeader(ref ListView list, Color backColor, Color foreColor) 
{ 
    list.OwnerDraw = true; 
    list.DrawColumnHeader += 
     new DrawListViewColumnHeaderEventHandler 
     (
      (sender, e) => headerDraw(sender, e, backColor, foreColor) 
     ); 
     list.DrawItem += new DrawListViewItemEventHandler(bodyDraw); 
} 
private static void headerDraw(object sender, DrawListViewColumnHeaderEventArgs e, Color backColor, Color foreColor) 
{ 
    e.Graphics.FillRectangle(new SolidBrush(backColor), e.Bounds); 
    e.Graphics.DrawString(e.Header.Text, e.Font, new SolidBrush(foreColor), e.Bounds); 
} 
private static void bodyDraw(object sender, DrawListViewItemEventArgs e) 
{ 
    e.DrawDefault = true; 
} 

verilen kod biraz soyut uygulama * olduğunu ve * BAZI RENKLER * bir çeşit renkle.

//Some examples: 
Color.white 
SystemColors.ActiveCaption 
Color.FromArgb(0, 102, 255, 102); 

Good Luck All!

İlgili konular