1
Imports System
Imports System.Reflection
Imports System.Runtime.CompilerServices
Imports System.Windows.Forms

Module DGV_Extensions
    <Extension()>
    Public Sub DoubleBuffered(aDGV As DataGridView, Optional setting As Boolean = True)
        'usage: SomeDataGridView.DoubleBuffered(True)
        Dim dgvType As Type = aDGV.GetType
        Dim propInfo As Reflection.PropertyInfo
        propInfo = dgvType.GetProperty("DoubleBuffered", _
                                       Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic)

        propInfo.SetValue(aDGV, setting, Nothing)
    End Sub

End Module



Public Class Form1
    Dim table As New DataTable("Table")

    Private Sub Form1_Load_1(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

        Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or _
ControlStyles.UserPaint Or _
ControlStyles.DoubleBuffer, True)

        DataGridView1.DoubleBuffered(True)

        table.Columns.Add("Id", Type.GetType("System.String"))
        table.Columns.Add("DESC", Type.GetType("System.String"))
        table.Columns.Add("RELAY", Type.GetType("System.String"))
        table.Columns.Add("COMMAND", Type.GetType("System.String"))
        table.Columns.Add("DT", Type.GetType("System.String"))
        table.Columns.Add("A", Type.GetType("System.String"))
        table.Columns.Add("B", Type.GetType("System.String"))
        table.Columns.Add("C", Type.GetType("System.String"))
        table.Columns.Add("D", Type.GetType("System.String"))
        table.Columns.Add("E", Type.GetType("System.String"))
        table.Columns.Add("F", Type.GetType("System.String"))
        table.Columns.Add("G", Type.GetType("System.String"))
        table.Columns.Add("H", Type.GetType("System.String"))
        table.Columns.Add("I", Type.GetType("System.String"))
        table.Columns.Add("J", Type.GetType("System.String"))
        table.Columns.Add("K", Type.GetType("System.String"))
        table.Columns.Add("L", Type.GetType("System.String"))
        table.Columns.Add("M", Type.GetType("System.String"))
        table.Columns.Add("N", Type.GetType("System.String"))
        table.Columns.Add("O", Type.GetType("System.String"))
        table.Columns.Add("P", Type.GetType("System.String"))
        table.Columns.Add("Q", Type.GetType("System.String"))
        table.Columns.Add("R", Type.GetType("System.String"))
        table.Columns.Add("S", Type.GetType("System.String"))
        table.Columns.Add("T", Type.GetType("System.String"))
        table.Columns.Add("U", Type.GetType("System.String"))
        table.Columns.Add("V", Type.GetType("System.String"))
        table.Columns.Add("W", Type.GetType("System.String"))
        table.Columns.Add("X", Type.GetType("System.String"))
        table.Columns.Add("Y", Type.GetType("System.String"))
        table.Columns.Add("Z", Type.GetType("System.String"))
        table.Columns.Add("AA", Type.GetType("System.String"))
        table.Columns.Add("BB", Type.GetType("System.String"))
        table.Columns.Add("CC", Type.GetType("System.String"))
        table.Columns.Add("DD", Type.GetType("System.String"))
        table.Columns.Add("EE", Type.GetType("System.String"))
        table.Columns.Add("FF", Type.GetType("System.String"))
        table.Columns.Add("GG", Type.GetType("System.String"))
        table.Columns.Add("HH", Type.GetType("System.String"))
        table.Columns.Add("II", Type.GetType("System.String"))
        table.Columns.Add("JJ", Type.GetType("System.String"))
        table.Columns.Add("KK", Type.GetType("System.String"))
        table.Columns.Add("LL", Type.GetType("System.String"))
        table.Columns.Add("MM", Type.GetType("System.String"))
        table.Columns.Add("NN", Type.GetType("System.String"))
        table.Columns.Add("OO", Type.GetType("System.String"))
        table.Columns.Add("PP", Type.GetType("System.String"))
        table.Columns.Add("QQ", Type.GetType("System.String"))
        table.Columns.Add("RR", Type.GetType("System.String"))

        For j As Integer = 0 To 500
            table.Rows.Add("", "", "", "")
        Next

        DataGridView1.DataSource = table

    End Sub

    Private Sub DataGridView1_CellPainting(sender As Object, e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting


        Dim gfx = e.Graphics
        Dim pen As New Pen(Color.FromArgb(0, 0, 96))

        If e.RowIndex > -1 And e.ColumnIndex > -1 Then

            If DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Selected = True Then

                e.Paint(e.CellBounds, DataGridViewPaintParts.Border)

                Using cpen As New Pen(Color.Yellow, 1)
                    e.Graphics.DrawRectangle(cpen, e.CellBounds.X + 1, e.CellBounds.Y + 1, e.CellBounds.Width - 3, e.CellBounds.Height - 3)
                End Using

                e.Handled = True

            End If

        End If


    End Sub


End Class

Please help me, how to remove this black color on selected cell without removing double buffering code

Han
  • 3,052
  • 2
  • 22
  • 31
Art76
  • 33
  • 6

1 Answers1

1

In your CellPainting event handler, change the line:

e.Paint(e.CellBounds, DataGridViewPaintParts.Border)

to be

e.Paint(e.CellBounds, DataGridViewPaintParts.All)

When you specify DataGridViewPaintParts.Border all that you are asking the Paint function to do is draw ONLY THE BORDER when want you want, is for the Paint function to draw all parts of the cell (including the contents).

JayV
  • 3,238
  • 2
  • 9
  • 14
  • Yes, you were right. Problem solved. Thank you very much – Art76 Jun 19 '19 at 14:15
  • @Art76 It's a pleasure to be able to help. Please don't forget to accept the answer to help others find the solution if they have the same problem. – JayV Jun 19 '19 at 14:23
  • @Art76 take a look at: https://stackoverflow.com/help/someone-answers. You should see a Grey checkmark on the side, click on the check mark beside the answer to toggle it from greyed out to filled in. – JayV Jun 19 '19 at 14:47