DataGridViewコントロールで列ヘッダや行ヘッダの色を変えるには?[2.0のみ、C#、VB].NET TIPS

» 2006年10月27日 05時00分 公開
[遠藤孝信デジタルアドバンテージ]
「.NET TIPS」のインデックス

連載目次

 DataGridViewコントロールで列ヘッダや行ヘッダの色を変更する場合には、ColumnHeadersDefaultCellStyleプロパティやRowHeadersDefaultCellStyleプロパティを変更すればよい。

 次の例ではコードにより列ヘッダと行ヘッダの背景色を変更している。Visual Studio 2005(以下、VS 2005)ではプロパティ・ウィンドウからもそれぞれのスタイルを設定可能だ。

// 列ヘッダの背景色の変更
dgv.ColumnHeadersDefaultCellStyle.BackColor = Color.Red;
// 行ヘッダの背景色の変更
dgv.RowHeadersDefaultCellStyle.BackColor = Color.Green;

' 列ヘッダの背景色の変更
dgv.ColumnHeadersDefaultCellStyle.BackColor = Color.Red
' 行ヘッダの背景色の変更
dgv.RowHeadersDefaultCellStyle.BackColor = Color.Green

列ヘッダと行ヘッダの背景色の変更(上:C#、下:VB)
変数dgvはDataGridViewコントロールのインスタンスを参照しているものとする。

 しかし、VS 2005でこのようなコードを記述しても、それが有効にならないことがある。これはアプリケーションに適用されているWindows XPのVisualスタイルが優先的に使用されるためだ。

 VS 2005で作成するWindowsアプリケーションでは、デフォルトでXPのVisualスタイルが適用されるように、自動生成されるコードでApplicationクラス(System.Windows.Forms名前空間)のEnableVisualStylesメソッドが呼び出されている*

*C#では「Program.cs」のMainメソッド内で呼び出されている。VB 2005では呼び出し行を参照できず、Visualスタイルの有効/無効はプロジェクトのプロパティで変更する。


 DataGridViewコントロールでは、アプリケーションにXPのVisualスタイルが適用されている場合には、デフォルトでその列ヘッダや行ヘッダにもそれが適用されるようになっている。

 ただし、DataGridViewコントロールのEnableHeadersVisualStylesプロパティをfalseに設定することにより、コントロールにVisualスタイルが適用されないようにすることができる(VS 2005ではこのプロパティもプロパティ・ウィンドウで設定可能)。

// Visualスタイルを使用しない
dgv.EnableHeadersVisualStyles = false;

' Visualスタイルを使用しない
dgv.EnableHeadersVisualStyles = False

列ヘッダと行ヘッダのVisualスタイルの変更(上:C#、下:VB)

 つまり、列ヘッダや行ヘッダの背景色などのスタイルを変更する場合には、あらかじめこの設定が必要になるということだ。

 以下の画面は行ヘッダと列ヘッダの背景色を変更したDataGridViewコントロールの実行例である。なお、このDataGridViewコントロールでは列ヘッダや行ヘッダの境界線も細いスタイルのもの変更している。

行ヘッダと列ヘッダの背景色を変更したDataGridViewコントロール 行ヘッダと列ヘッダの背景色を変更したDataGridViewコントロール

 次に、このサンプル・プログラムのソース・コードを示す。

// dgvvisualstyle.cs

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

public class MyForm : Form {

  DataGridView dgv;

  // フォームのLoadイベント・ハンドラ
  void MyForm_Load(object sender, EventArgs e) {
    // データソースとして画像デコーダ一覧を使用
    dgv.DataSource = ImageCodecInfo.GetImageDecoders();

    // Visualスタイルを使用しない
    dgv.EnableHeadersVisualStyles = false;

    // 列ヘッダと行ヘッダの背景色を変更
    dgv.ColumnHeadersDefaultCellStyle.BackColor = Color.Red;
    dgv.RowHeadersDefaultCellStyle.BackColor = Color.Green;

    // 列ヘッダと行ヘッダの境界線を変更
    dgv.RowHeadersBorderStyle =
                DataGridViewHeaderBorderStyle.Single;
    dgv.ColumnHeadersBorderStyle =
                DataGridViewHeaderBorderStyle.Single;
  }

  // フォームのコンストラクタ
  public MyForm() {
    dgv = new DataGridView();
    dgv.Dock = DockStyle.Fill;
    this.Controls.Add(dgv);
    this.Size = new Size(480, 240);
    this.Load += new EventHandler(MyForm_Load);
  }
}

class Program {
  static void Main() {
    // XPのVisualスタイルを使用
    Application.EnableVisualStyles();
    Application.Run(new MyForm());
  }
}

// コンパイル方法:csc dgvvisualstyle.cs

列ヘッダと行ヘッダのスタイルを変更するC#のサンプル・プログラム(dgvvisualstyle.cs)
dgvvisualstyle.csのダウンロード

' dgvvisualstyle.vb

Imports System
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Windows.Forms

Public Class MyForm
    Inherits Form

  Dim dgv As DataGridView

  ' フォームのLoadイベント・ハンドラ
  Sub MyForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ' データソースとして画像デコーダ一覧を使用
    dgv.DataSource = ImageCodecInfo.GetImageDecoders()

    ' Visualスタイルを使用しない
    dgv.EnableHeadersVisualStyles = false

    ' 列ヘッダと行ヘッダの背景色を変更
    dgv.ColumnHeadersDefaultCellStyle.BackColor = Color.Red
    dgv.RowHeadersDefaultCellStyle.BackColor = Color.Green

    ' 列ヘッダと行ヘッダの境界線を変更
    dgv.RowHeadersBorderStyle = _
                DataGridViewHeaderBorderStyle.Single
    dgv.ColumnHeadersBorderStyle = _
                DataGridViewHeaderBorderStyle.Single
  End Sub

  ' フォームのコンストラクタ
  Public Sub New()
    dgv = New DataGridView()
    dgv.Dock = DockStyle.Fill
    Me.Controls.Add(dgv)
    Me.Size = new Size(480, 240)
  End Sub
End Class

Class Program
  Shared Sub Main()
    ' XPのVisualスタイルを使用
    Application.EnableVisualStyles()
    Application.Run(New MyForm())
  End Sub
End Class

' コンパイル方法:vbc dgvvisualstyle.vb

列ヘッダと行ヘッダのスタイルを変更するVBのサンプル・プログラム(dgvvisualstyle.vb)
dgvvisualstyle.vbのダウンロード

 ここではコードを簡便にするために、.NETで利用可能な画像のデコーダ一覧をデータソースとして使用している。画像のデコーダについては「TIPS:画像を読み込むには?」を参照してほしい。

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:Windowsフォーム 処理対象:DataGridViewコントロール
使用ライブラリ:DataGridViewコントロール
使用ライブラリ:Applicationクラス(System.Windows.Forms名前空間)


「.NET TIPS」のインデックス

.NET TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。