Rubrik: Controls · DataGrid & DataGridView | VB-Versionen: VB2010 | 12.09.11 |
DataGridView- individuelle Hintergrundgestaltung für RowHeader Eine Funktion, die eine Möglichkeit für das individuelle Gestalten des Hintergrundes der RowHeader-Zellen im DataGridView-Control realisiert. | ||
Autor: Dietrich Herrmann | Bewertung: | Views: 10.817 |
ohne Homepage | System: Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Dieser Tipp geht im Grundprinzip von der Vorgehensweise im Tipp für die Hintergrundgestaltung der ColumnHeader-Zellen aus. Die Funktion RowHeadersBG wird ebenfalls im CellPainting-Ereignis des DatagridView angewendet.
Die Grundidee ist die Darstellung eines plastischen ('buttonartigen') Hintergrunds.
Hierzu benötigt man zunächst die Definition für die Farbverläufe:
Imports System.Drawing.Drawing2D ...
' Definieren der Farben für die RowHeader-Zelle Public colorBlendDGV As New ColorBlend
Und bspw. dann konkret:
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load ' ColorBlend für ColumnHeaders der DatagridViews festlegen With colorBlendDGV .Colors = New Color() _ {Color.WhiteSmoke, Color.LightBlue, Color.LightBlue, Color.Gray} .Positions = New Single() {0.0, 0.22, 0.78, 1.0} End With End Sub
(Man kann natürlich dieselbe Colordefinition benutzen, die man bei der eventuellen Anwendung der Gestaltung für die ColumnHeaders definiert hat.)
Die Funktion:
'' <summary> ''' Gradient als Hintergrund für RowHeaders ''' </summary> ''' <param name="theDGV">das DataGridView</param> ''' <param name="e">DataGridViewCellPaintingEventArgs</param> ''' <param name="colorBlend">Feld für die Gradientfarben</param> ''' <param name="angle">der Winkel für Gradient (90: horizontal)</param> ''' <param name="borderColor">die Farbe des Randes</param> ''' <remarks >im Cellpaint-Ereignis des DatagridView anwenden!</remarks> Public Sub RowHeadersBG(ByVal theDGV As DataGridView, _ ByVal e As DataGridViewCellPaintingEventArgs, _ ByVal colorBlend As ColorBlend, _ Optional ByVal angle As Single = 90, _ Optional ByVal borderColor As Color = Nothing) With e ' nur für Zeilen-Header ausführen If .ColumnIndex > 0 Then Exit Sub If theDGV.AllowUserToAddRows And .RowIndex = theDGV.RowCount - 1 Then Exit Sub ' das Rechteck der Zelle Dim rect As New Rectangle(.CellBounds.Left, .CellBounds.Top, _ .CellBounds.Width, .CellBounds.Height) ' den Brush initialisieren Dim cellBrush As New LinearGradientBrush(rect, Color.Red, Color.Blue, angle) cellBrush.GammaCorrection = True cellBrush.InterpolationColors = colorBlend ' die Hintergrund-Farben definieren .Graphics.FillRectangle(cellBrush, .CellBounds) ' den Rand der Zelle zeichnen Dim borderPen As New Pen(borderColor) If Not IsNothing(borderColor) Then Dim recBorder As New Rectangle(.CellBounds.X - 1, .CellBounds.Y, _ .CellBounds.Width, .CellBounds.Height - 1) .Graphics.DrawRectangle(borderPen, recBorder) End If .Handled = True cellBrush.Dispose() borderPen.Dispose() End With End Sub
Und hier die Anwendung der Funktion im CellPaint-Ereignis des DGV:
Private Sub DataGridView1_CellPainting(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) _ Handles DataGridView1.CellPainting RowHeadersBG(DatagridView1, e, colorBlendDGV) End Sub