如何在DataGridView上创建固定的背景

obl*_*obl 2 vb.net datagridview

我做了一个自定义控件继承DataGridView,以便有一个透明的背景.现在我试图在计时器上设置一个滚动功能,每秒向下滚动一行.但是,当我尝试滚动(垂直)时,背景图像不固定.滚动时有没有办法使背景图像固定?

编辑:这是处理滚动计时器的代码.

Private Sub Sub1

    'Some previous code

    If DataGridView1.Rows.Count > 10 Then
        ScrollIndex1 = 0 'Integer for scroll index
        DGVAutoScroll()
    End If

End Sub

Private Sub DGVAutoScroll()

    Timer2.Enabled = True
    Timer2.Interval = 1000

End Sub

Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick

    If ScrollIndex1 = DataGridView1.Rows.Count - 1 Then
        ScrollIndex1 = 0
        DataGridView1.FirstDisplayedScrollingRowIndex = ScrollIndex1
        ScrollIndex1 += 1
    Else
        DataGridView1.FirstDisplayedScrollingRowIndex = ScrollIndex1
        ScrollIndex1 += 1
    End If

End Sub

'Custom DataGridView class
Imports System.ComponentModel
Imports System.Windows.Forms

Public Class MyDGV
    Inherits DataGridView

    Public Property DGVHasTransparentBackground As Boolean
        Get
            Return Nothing
        End Get
        Set()
            SetTransparentProperties(True)
        End Set
    End Property

    Public Property ScrollBar
        Get
            Return Nothing
        End Get
        Set(value)
            BackgroundColor = Color.Transparent
        End Set

    End Property

    Public Sub New()
        DGVHasTransparentBackground = True
    End Sub

    Private Sub SetTransparentProperties(ByRef SetAsTransparent As Boolean)
        MyBase.DoubleBuffered = True
        MyBase.EnableHeadersVisualStyles = False
        MyBase.ColumnHeadersDefaultCellStyle.BackColor = Color.Transparent
        MyBase.RowHeadersDefaultCellStyle.BackColor = Color.Transparent
        SetCellStyle(Color.Transparent)
    End Sub


    Protected Overrides Sub PaintBackground(graphics As System.Drawing.Graphics, clipBounds As System.Drawing.Rectangle, gridBounds As System.Drawing.Rectangle)
        MyBase.PaintBackground(graphics, clipBounds, gridBounds)

        Dim rectSource As New Rectangle(MyBase.Location, MyBase.Size)
        Dim rectDest As New Rectangle(0, 0, rectSource.Width, rectSource.Height)

        Dim b As New Bitmap(Parent.ClientRectangle.Width, Parent.ClientRectangle.Height)
        Graphics.FromImage(b).DrawImage(MyBase.Parent.BackgroundImage, Parent.ClientRectangle)
        graphics.DrawImage(b, rectDest, rectSource, GraphicsUnit.Pixel)

    End Sub

    Protected Overrides Sub OnColumnAdded(e As System.Windows.Forms.DataGridViewColumnEventArgs)
        MyBase.OnColumnAdded(e)

        SetCellStyle(Color.Transparent)
    End Sub

    Private Sub SetCellStyle(ByVal cellColour As Color)
        For Each col As DataGridViewColumn In MyBase.Columns
            col.DefaultCellStyle.BackColor = cellColour
            col.DefaultCellStyle.SelectionBackColor = cellColour
        Next
    End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

obl*_*obl 5

看起来我必须在计时器滴答声中调用DataGridView1.SelectAll().感谢大家.