C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 77 を表示中)
■45334 / )  Re[1]: DatagridViewのフォーカス枠
□投稿者/ 魔界の仮面弁士 (1445回)-(2010/01/10(Sun) 14:28:51)
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


なお上記では、水平スクロール時の描画処理が考慮されていません。

返信 編集キー/


管理者用

- Child Tree -