2009-11-29 119 views
7

ListViewのヘッダーの背景色を変更するにはどうすればよいですか?Winform ListViewヘッダーの背景色を変更します

+1

Paintイベントをオーバーライドしてカスタム図面を実装する必要があります。 –

+0

PaintメソッドをオーバーライドするとListViewに何も行われません。 @Davidが提案したOwnerDrawメカニズムを使用する必要があります。そうすることで、ヘッダーコントロールからすべてのスタイリングが削除されます。ホットアイテム、ソートインジケーター、グラデーションバックグラウンドはありません。 – Grammarian

答えて

7

これを行うには、リストビューのOwnerDrawプロパティをtrueに設定します。

これにより、リストビューの描画イベントにイベントハンドラを提供することができます。

以下

MSDNの詳細な例がありますが赤にヘッダーの色を設定するには、いくつかのサンプルコードです:

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

を私は思います(ただし、間違って証明することに満足しています)OwnerDrawするがセットされたことをtrueにするには、次のようにデフォルトの実装を持つ他の描画イベントのハンドラも用意する必要があります:

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

私は確かにmaですリストビューにアイテムを描画させないようにする。

+0

警告の言葉として、それを理解するのに1時間以上かかるので、drawcolumnheaderの中にMSGBOXコマンドを入れないでください!それはvb.netをハングアップ - これはうまくいきました – cardmagik

5

私はこれがパーティーに少し遅れていることを知っていますが、私はまだこの投稿を見ました。これが私を助けてくれました。ここでダビデはちょうどあなたが、コードの最初のビットを置くどんなクラスで* *クラス名を置き換えるフォームのコンストラクタで

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

これを呼び出すその後

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

を供給し、コードを少し抽象化されたアプリケーションです*いくつかの種類の色を持つ* COLOR *があります。

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

Good Luck All!

関連する問題