Tipp-Upload: VB.NET 0426: OwnerDrawing - Behavior für DataGridView
von Spatzenkanonier
Ü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.
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 |
Verwendete API-Aufrufe: |
Download: |
' 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.