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
しかし、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
つまり、列ヘッダや行ヘッダの背景色などのスタイルを変更する場合には、あらかじめこの設定が必要になるということだ。
以下の画面は行ヘッダと列ヘッダの背景色を変更した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
' 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
ここではコードを簡便にするために、.NETで利用可能な画像のデコーダ一覧をデータソースとして使用している。画像のデコーダについては「TIPS:画像を読み込むには?」を参照してほしい。
利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:Windowsフォーム 処理対象:DataGridViewコントロール
使用ライブラリ:DataGridViewコントロール
使用ライブラリ:Applicationクラス(System.Windows.Forms名前空間)
Copyright© Digital Advantage Corp. All Rights Reserved.