vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Controls · DataGrid & DataGridView   |   VB-Versionen: VB202214.08.25
Funktion zum Kennzeichnen von leeren DatagridView-Zellen

Die Funktion gestattet das Kennzeichnen von leeren Zellen mittels diagonalem farbigen Strich oder Kreuz.

Autor:   Dietrich HerrmannBewertung:  Views:  203 
ohne HomepageSystem:  Win7, Win8, Win10, Win11kein Beispielprojekt 

Diese Funktion wird im CellPainting-Ereignis angewandt. Es können mehrere Spalten des DGV für die Überprüfung und Kennzeichnung mit ihrem Spaltennamen vorgegeben werden.

Hier die Funktion:

''' <summary>
''' Draw Diagonalen ins Rechteck der Datagridview-Zelle
''' </summary>
''' <param name="e">DataGridViewCellPaintingEventArgs</param>
''' <param name="theDGV">das DatagridView</param>
''' <param name="theColumns">die zu barbeitenden Spaltennamen</param>
''' <param name="bgColor">die Hintergrundfarbe</param>
''' <param name="art">Art Diagonalen: 1..von links oben nach rechts unten, 
''' 2..  von rechts oben nach links unten, 3.. ein Kreuz</param>
''' <param name="PenColor">die Farbe der Linien</param>
''' <param name="PenSize">die Stärke der Linien</param>
''' <remarks>ColorNames kann auch nur eine Spalte sein</remarks>
Public Sub drawingCellCross(e As DataGridViewCellPaintingEventArgs,
  theDGV As DataGridView, theColumns() As String,
  bgColor As Color,
  Optional art As Short = 2,
  Optional PenColor As Color = Nothing,
  Optional PenSize As Short = 1)
 
  Dim p As New Pen(PenColor, PenSize)
  Dim g As Graphics = e.Graphics, i As Short, aColumn As String
 
  For i = 0 To theColumns.Length - 1
    aColumn = theColumns(i)
    If theDGV.Columns(aColumn).Index = e.ColumnIndex AndAlso e.RowIndex >= 0 _
      AndAlso IsDBNull(e.Value) Then
 
      Dim rec As Rectangle =
        New Rectangle(e.CellBounds.X, e.CellBounds.Y, e.CellBounds.Width, e.CellBounds.Height)
 
      Using gridBrush As Brush =
        New SolidBrush(theDGV.GridColor), backColorBrush As Brush =
        New SolidBrush(bgColor)
 
        Using gridLinePen As Pen = New Pen(PenColor, PenSize)
          ' Erase the cell.
          e.Graphics.FillRectangle(backColorBrush, e.CellBounds)
          With g
            Select Case art
              Case 1
                ' Diagonale zeichnen
                ' von links oben nach rechts unten
                .DrawLine(p, rec.X, rec.Y, rec.X + rec.Width, rec.Y + rec.Height)   
 
              Case 2
                ' oder: ' von rechts oben nach links unten
                .DrawLine(p, rec.X + rec.Width, rec.Y, rec.X, rec.Y + rec.Height)   
 
              Case Else
                'Kreuz
                ' von links oben nach rechts unten
                .DrawLine(p, rec.X, rec.Y, rec.X + rec.Width, rec.Y + rec.Height)   
                ' von rechts oben nach links unten
                .DrawLine(p, rec.X + rec.Width, rec.Y, rec.X, rec.Y + rec.Height)   
            End Select
          End With
          e.Handled = True
        End Using
      End Using
    End If
  Next 
End Sub

Anwendungsbeispiel bei CellPainting:

drawingCellCross(e, myDGV, {"Vorwahl", "Längengrad", "Breitengrad"}, Color.MistyRose, 3, Color.Red)



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

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.
 
 
Copyright ©2000-2025 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


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.