Private Sub DataGridView1_CellPainting(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) _ Handles DataGridView1.CellPainting With DataGridView1 If e.RowIndex >= 0 AndAlso Not .Rows(e.RowIndex).IsNewRow AndAlso _ e.ColumnIndex >= 0 AndAlso .Columns(e.ColumnIndex).Name = "KdNr" Then ' Breite des Verlaufsrechtecks Const rectW = 6 Dim randRect As New Rectangle(e.CellBounds.Right - rectW, e.CellBounds.Y, _ rectW, e.CellBounds.Height - 1) ' Zellen-Hintergrundfarbe Dim backColorBrush As New SolidBrush(e.CellStyle.BackColor) ' Farbverlauf für die Abgrenzungslinie Dim gridBrush As LinearGradientBrush gridBrush = New LinearGradientBrush(randRect, e.CellStyle.BackColor, _ Color.Gray, LinearGradientMode.Horizontal, False) ' Farbe der Gitterlinien Dim gridLinePen As New Pen(DataGridView1.GridColor) ' StringFormat für Textdarstellung Dim sf As New StringFormat With sf .FormatFlags = StringFormatFlags.NoWrap Or StringFormatFlags.FitBlackBox .LineAlignment = StringAlignment.Center .Alignment = StringAlignment.Near .Trimming = StringTrimming.None End With With e.Graphics ' Hintergrund der Zelle füllen .FillRectangle(backColorBrush, e.CellBounds) ' Gitterlinien zeichnen .DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1, _ e.CellBounds.Right - 1, e.CellBounds.Bottom - 1) ' Hintergrund-Farbverlauf zeichnen .FillRectangle(gridBrush, randRect) If Not (e.Value Is Nothing) And e.Value IsNot DBNull.Value Then ' Rechteck für Textanzeige des Zelleninhaltes Dim r As Rectangle With r .Width = (e.CellBounds.Right - 2) - (e.CellBounds.Left + 2) .Height = (e.CellBounds.Bottom - 2) - (e.CellBounds.Top + 2) .X = e.CellBounds.X + 2 .Y = e.CellBounds.Y + 2 End With ' Zelleninhalt ausgeben .TextRenderingHint = Drawing.Text.TextRenderingHint.ClearTypeGridFit .DrawString(CStr(e.Value), e.CellStyle.Font, Brushes.Black, r, sf) r = Nothing End If End With ' Rückgabe, dass das Zeichnen der Zelle manuell erfolgte e.Handled = True End If End With End Sub Update vom 18.05.09 ''' <summary> ''' Zeichnen der letzten Frozen-Zelle mit rechtem Rand ''' (muss im Cellpainting-Ereignis des Datagridviews geschehen) ''' </summary> ''' <param name="dgv">Datagridview-Control</param> ''' <param name="e">DataGridViewCellPaintingEventArgs</param> ''' <param name="cName">Spaltenname der letzten rechten Frozen-Spalte</param> ''' <param name="rectW">Breite des Abgrenzungsrandes</param> ''' <param name="grColor">Farbe zur Kennzeichnung</param> Public Sub paintFrozenBorder(ByVal dgv As DataGridView, _ ByVal e As DataGridViewCellPaintingEventArgs, _ ByVal cName As String, _ ByVal rectW As Short, _ ByVal grColor As Color) Dim bColor As Color Dim backColorBrush, textBrush As Brush Dim gridBrush As LinearGradientBrush Dim randRect As Rectangle ' Farbe der Gitterlinien des Datagridview Dim gridLinePen As New Pen(dgv.GridColor) ' Headerzellen With e If .ColumnIndex >= 0 AndAlso .RowIndex = -1 _ AndAlso dgv.Columns(cName).Index = .ColumnIndex Then ' Zellen-Hintergrundfarbe backColorBrush = New SolidBrush(.CellStyle.BackColor) .Graphics.FillRectangle(backColorBrush, .CellBounds) .Paint(e.ClipBounds, (DataGridViewPaintParts.All)) randRect = New Rectangle(.CellBounds.Right - rectW, _ .CellBounds.Y, rectW, .CellBounds.Height - 1) ' Farbverlauf für die Abgrenzungslinie gridBrush = New LinearGradientBrush(randRect, bColor, _ grColor, LinearGradientMode.Horizontal, False) .Graphics.FillRectangle(gridBrush, randRect) ' Rückgabe, dass das Zeichnen der Zelle manuell erfolgte .Handled = True End If End With ' Wertezellen If e.ColumnIndex >= 0 AndAlso dgv.Columns(cName).Index = e.ColumnIndex AndAlso e.RowIndex >= 0 _ AndAlso Not dgv.Rows(e.RowIndex).IsNewRow Then randRect = New Rectangle(e.CellBounds.Right - rectW, _ e.CellBounds.Y, rectW, e.CellBounds.Height - 1) If dgv.Rows(e.RowIndex).Selected Then bColor = e.CellStyle.SelectionBackColor textBrush = New SolidBrush(e.CellStyle.SelectionForeColor) Else bColor = e.CellStyle.BackColor textBrush = New SolidBrush(e.CellStyle.ForeColor) End If ' Zellen-Hintergrundfarbe backColorBrush = New SolidBrush(bColor) ' Farbverlauf für die Abgrenzungslinie gridBrush = New LinearGradientBrush(randRect, bColor, _ grColor, LinearGradientMode.Horizontal, False) ' StringFormat für Textdarstellung Dim sf As New StringFormat With sf .FormatFlags = StringFormatFlags.NoWrap Or StringFormatFlags.FitBlackBox .LineAlignment = StringAlignment.Center .Alignment = StringAlignment.Near .Trimming = StringTrimming.None End With With e.Graphics ' Hintergrund der Zelle füllen .FillRectangle(backColorBrush, e.CellBounds) ' Gitterlinien zeichnen .DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1, _ e.CellBounds.Right - 1, e.CellBounds.Bottom - 1) ' Hintergrund-Farbverlauf zeichnen .FillRectangle(gridBrush, randRect) If Not (e.Value Is Nothing) And e.Value IsNot DBNull.Value Then ' Rechteck für Textanzeige des Zelleninhaltes Dim r As Rectangle With r .Width = (e.CellBounds.Right - 2) - (e.CellBounds.Left + 2) .Height = (e.CellBounds.Bottom - 2) - (e.CellBounds.Top + 2) .X = e.CellBounds.X + 2 .Y = e.CellBounds.Y + 2 End With ' Zelleninhalt ausgeben .TextRenderingHint = Drawing.Text.TextRenderingHint.ClearTypeGridFit .DrawString(CStr(e.Value), e.CellStyle.Font, textBrush, r, sf) r = Nothing End If End With ' Rückgabe, dass das Zeichnen der Zelle manuell erfolgte e.Handled = True End If End Sub Und hier ein Beispiel des Aufrufs im CellPainting-Ereignis des Datagridview: Private Sub DataGridView1_CellPainting(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) _ Handles DataGridView1.CellPainting paintFrozenBorder(DataGridView1, e, "KdNr", 6, Color.Gray) End Sub Dieser Tipp wurde bereits 13.356 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevAniGif (VB/VBA) Anzeigen von animierten GIF-Dateien Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |