注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。
DataGridViewで現在フォーカスのあるセルには点線の枠が表示されます。このフォーカス枠が表示されないようにする方法を紹介します。
それには、CellPaintingイベントハンドラでDataGridViewCellPaintingEventArgs.Paintメソッドにより、フォーカス枠以外を描画するようにします。
以下に例を示します。
'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
//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イベントでも同様のことができます。こちらの方が簡単かもしれません。
'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
//RowPrePaintイベントハンドラ private void DataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e) { //フォーカス枠を描画しない e.PaintParts &= ~DataGridViewPaintParts.Focus; }