Die Community zu .NET und Classic VB.
Menü

Tipp-Upload: VB.NET 0426: OwnerDrawing - Behavior für DataGridView

 von 

Über den Tipp  

Dieser Tippvorschlag wird übernommen.

Der Vorschlag ist in den folgenden Kategorien zu finden:

  • Sprachmerkmale
  • Steuerelemente

Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
Behavior, DatagridView, OwnerDrawing

Der Vorschlag wurde erstellt am: 05.02.2012 13:09.
Die letzte Aktualisierung erfolgte am 05.02.2012 13:25.

Zurück zur Übersicht

Beschreibung  

über Ereignisse lässt sich das Verhalten von Controls differenziert steuern.
Vielfältige und aufwändige Anforderungen in reichhaltigen Forms führen aber schnell zu erheblicher Unübersichtlichkeit im UserCode des Forms.
Abhilfe schaffen sog. "Behaviors": wiederverwendbare Klassen, in denen der EreignisCode gekapselt ist, und die im Form_Load-Event nur noch für die betreffenden Controls registriert werden müssen.

Hier ein DatagridView-Behavior, welches das DGV mit einer Zeilennumerierung ausstattet.

Schwierigkeitsgrad

Schwierigkeitsgrad 3

Verwendete API-Aufrufe:

Download:

Download des Beispielprojektes [20,36 KB]

' Dieser Source stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!
'
' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird.
' In den Zip-Dateien ist er jedoch zu finden.

' --------- Anfang Projektgruppe DgvNumberedRows.sln ---------
' -------- Anfang Projektdatei DgvNumberedRows.vbproj --------
' ------------ Anfang Datei frmDgvNumberedRows.vb ------------
Public Class frmDgvNumberedRows

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load

        NumberedRowBehavior.Register(DGV)

    End Sub

End Class

' ------------- Ende Datei frmDgvNumberedRows.vb -------------
' ----------- Anfang Datei NumberedRowBehavior.vb  -----------
Public Class NumberedRowBehavior

    Private _CurrentRowFont As Font
    Private WithEvents _DGV As DataGridView

    Public Shared Sub Register(ByVal DGV As DataGridView)

        With New NumberedRowBehavior
            ._DGV = DGV
            ._CurrentRowFont = New Font(DGV.RowHeadersDefaultCellStyle.Font, FontStyle.Bold)
        End With

    End Sub

    Private Sub New() ' verhindert externe Instanzierung

    End Sub

    Private Sub DGV_CellPainting(ByVal sender As Object, ByVal e As _
        DataGridViewCellPaintingEventArgs) Handles _DGV.CellPainting

        ' 3 Ausschluß-Kriterien
        If e.ColumnIndex >= 0 OrElse e.RowIndex < 0 OrElse _DGV.Rows(e.RowIndex).IsNewRow _
            Then Return

        With _DGV.RowHeadersDefaultCellStyle

            Dim font = If(e.RowIndex = _DGV.CurrentRow.Index, _CurrentRowFont, .Font)
            Dim selected = e.State.HasFlag(DataGridViewElementStates.Selected)
            Dim color = If(selected, .SelectionForeColor, .ForeColor)

            e.PaintBackground(e.CellBounds, selected)
            TextRenderer.DrawText(e.Graphics, e.RowIndex.ToString, font, e.CellBounds, color)
            e.Handled = True
        End With

    End Sub

    Private Sub _DGV_Disposed(ByVal sender As Object, ByVal e As EventArgs) Handles _DGV.Disposed

        _CurrentRowFont.Dispose()

    End Sub

End Class

' ------------ Ende Datei NumberedRowBehavior.vb  ------------
' --------- Ende Projektdatei DgvNumberedRows.vbproj ---------
' ---------- Ende Projektgruppe DgvNumberedRows.sln ----------

	

Diskussion  

Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.

Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.