DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

DataGridViewのセルにフォーカス枠が表示されないようにする

注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。

DataGridViewで現在フォーカスのあるセルには点線の枠が表示されます。このフォーカス枠が表示されないようにする方法を紹介します。

それには、CellPaintingイベントハンドラでDataGridViewCellPaintingEventArgs.Paintメソッドにより、フォーカス枠以外を描画するようにします。

以下に例を示します。

VB.NET
コードを隠すコードを選択
'CellPaintingイベントハンドラ
Private Sub DataGridView1_CellPainting(ByVal sender As Object, _
        ByVal e As DataGridViewCellPaintingEventArgs) _
        Handles DataGridView1.CellPainting
    'ヘッダー以外のとき
    If e.ColumnIndex >= 0 And e.RowIndex >= 0 Then
        'フォーカス枠以外が描画されるようにする
        Dim paintParts As DataGridViewPaintParts = _
            e.PaintParts And Not DataGridViewPaintParts.Focus
        'セルを描画する
        e.Paint(e.ClipBounds, paintParts)

        '描画が完了したことを知らせる
        e.Handled = True
    End If
End Sub
C#
コードを隠すコードを選択
//CellPaintingイベントハンドラ
private void DataGridView1_CellPainting(object sender,
    DataGridViewCellPaintingEventArgs e)
{
    //ヘッダー以外のとき
    if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
    {
        //フォーカス枠以外が描画されるようにする
        DataGridViewPaintParts paintParts =
            e.PaintParts & ~DataGridViewPaintParts.Focus;
        //セルを描画する
        e.Paint(e.ClipBounds, paintParts);

        //描画が完了したことを知らせる
        e.Handled = true;
    }
}

または、RowPrePaintイベントでも同様のことができます。こちらの方が簡単かもしれません。

VB.NET
コードを隠すコードを選択
'RowPrePaintイベントハンドラ
Private Sub DataGridView1_RowPrePaint(ByVal sender As Object, _
        ByVal e As DataGridViewRowPrePaintEventArgs) _
        Handles DataGridView1.RowPrePaint
    'フォーカス枠を描画しない
    e.PaintParts = e.PaintParts And Not DataGridViewPaintParts.Focus
End Sub
C#
コードを隠すコードを選択
//RowPrePaintイベントハンドラ
private void DataGridView1_RowPrePaint(object sender,
    DataGridViewRowPrePaintEventArgs e)
{
    //フォーカス枠を描画しない
    e.PaintParts &= ~DataGridViewPaintParts.Focus;
}

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。