none
DataGridViewのRowPostPaintイベント処理について RRS feed

  • 質問

  • お世話になります。

    現在、DataGridViewのセルを結合する処理を検討しています。

    その中で、DataViewRowのRowPostPaintをハンドリングし、セルの背景の描画とTextの描画をするところまでは

    できたのですが、DataGridViewをスクロールしたところ、描画がうまくいかなくなりました。

    具体的には、スクロールをした際に描画しているTextの残像が残るような現象が発生しました。

    ただし、上記の現象が発生した場合でも、列ヘッダでのソート等を行うと、描画が正常になります。

        Private Sub DataGridView1_RowPostPaint(sender As System.Object, e As System.Windows.Forms.DataGridViewRowPostPaintEventArgs) Handles DataGridView1.RowPostPaint
            If e.RowIndex < 0 Then
                Return
            End If

            Dim dv As DataGridView = DirectCast(sender, DataGridView)

            Dim rect As Rectangle
            Dim cell As DataGridViewCell
            ' 1列目の処理
            cell = dv(1, e.RowIndex)
            rect = e.RowBounds
            If cell.ColumnIndex = 1 Then
                Using brush As New SolidBrush(dv.DefaultCellStyle.BackColor)
                    e.Graphics.FillRectangle(brush, rect)
                    Using pen As New Pen(dv.GridColor)
                        e.Graphics.DrawRectangle(pen, rect)
                    End Using
                End Using
                TextRenderer.DrawText(e.Graphics, "aaaa", dv.DefaultCellStyle.Font, rect, dv.DefaultCellStyle.ForeColor, TextFormatFlags.Left + TextFormatFlags.VerticalCenter)
            End If
        End Sub

    上記のコードで初期の表示はできるのですが、スクロールした際に、描画がうまくいきません。

    回避策などありましたらお教え願います。

    2012年12月12日 6:56

すべての返信

  • DataGridView.VirtualMode=true を使用する必要があります。

    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats

    2013年3月29日 9:07
  • ymas2012さん、こんにちは。だいぶ日が経ってますが、その後いかがでしょうか?
    ProgrammingVolunteer さまの投稿が参考になったと思われますので、勝手ながら私の方で回答マークを付けさせて頂きました。

    参考になった投稿には、質問者が回答マークを付けることができます。この回答マークはymas2012さんが後から外すことも可能です。
     他の方が後からこのスレッドを閲覧したときの参考のために、ぜひ回答をマークして頂くようお願いいたします。


    ひらぽん http://d.hatena.ne.jp/hilapon/

    2013年4月4日 6:32
    モデレータ