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

时间:2016-12-21 21:40:50

标签: 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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

我假设你想要一个数据背后的图像( datagridview )。

如果 datagridview 是透明的,那么只需在后台添加图片。将其粘贴在表单上或 datagridview 后面的项目上。它不会滚动,因为它将在 datagridview

之外

如果数据不清晰可见,则更改图像alpha。