|
■No45328 (hs さん) に返信
> 通常
> .........._______________________________________________
> . . | |
> .........._____________|_________________________________|
> ↑
> この部分に枠
>
> やりたいこと
> ..........................................................
> : | | :
> .........|.............|.................................:
本来のフォーカス枠を消しておき、代わりに自前で描画してみては如何でしょう。
Private Sub DataGridView1_RowPostPaint(sender As DataGridView, _
e As DataGridViewRowPostPaintEventArgs) Handles DataGridView1.RowPostPaint
'カレント行のみフォーカス枠を表示
If e.RowIndex >= 0 AndAlso sender.CurrentCellAddress.Y = e.RowIndex Then
Dim max = sender.ColumnCount - 1
Dim lt = sender.GetCellDisplayRectangle(0, e.RowIndex, False)
Dim rb = sender.GetCellDisplayRectangle(max, e.RowIndex, False)
Dim rect = Rectangle.Union(lt, rb)
ControlPaint.DrawFocusRectangle(e.Graphics, rect)
End If
End Sub
Private Sub DataGridView1_RowPrePaint(sender As DataGridView, _
e As DataGridViewRowPrePaintEventArgs) Handles DataGridView1.RowPrePaint
'フォーカス枠を描画しない
e.PaintParts = e.PaintParts And Not DataGridViewPaintParts.Focus
End Sub
なお上記では、水平スクロール時の描画処理が考慮されていません。
|