Eigenes Control, DGB - unklarer Effekt im Header mit schriftart

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von michl75.

    Eigenes Control, DGB - unklarer Effekt im Header mit schriftart

    Hallo,

    muss einfachheitshalber einige DGV neu einsetzen bzw. zusätzlich einfügen usw.

    Dachte mir, machste ein eigenes Control als DGV und entsprechender Schrift wie alles andere auch. Damit alles irgendwann mal gleich aussieht.

    Dabei ist mir folgendes aufgefallen, die Schriftart im Header wird immer auf Segoe UI; 9pt zurückgesetzt. Auch wenn man die Schriftart manuell in den Eigenschaften des DGV hinzufügt.

    Ich hab jetzt auf anhieb nichts dazu gefunden, warum dieses Verhalten auftritt. Habe Ihr vielleicht ne Idee oder Hinweis? Vllt. hab ich was falsch gemacht?

    Hier der Code vom Control:

    VB.NET-Quellcode

    1. Public Class E_DGB_Std1
    2. Inherits Windows.Forms.DataGridView
    3. Public Sub New()
    4. Dim Style1 As New DataGridViewCellStyle
    5. Style1.BackColor = System.Drawing.Color.LightYellow
    6. Dim Style2 As New DataGridViewCellStyle
    7. Style2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft
    8. Style2.BackColor = System.Drawing.SystemColors.Control
    9. Style2.Font = New System.Drawing.Font("Droid Sans", 9.0!)
    10. Style2.ForeColor = System.Drawing.SystemColors.WindowText
    11. Style2.SelectionBackColor = System.Drawing.SystemColors.Highlight
    12. Style2.SelectionForeColor = System.Drawing.SystemColors.HighlightText
    13. Style2.WrapMode = System.Windows.Forms.DataGridViewTriState.[True]
    14. Dim Style3 As New DataGridViewCellStyle
    15. Style3.Font = New System.Drawing.Font("Droid Sans", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
    16. Me.AlternatingRowsDefaultCellStyle = Style1
    17. Me.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells
    18. Me.BackgroundColor = System.Drawing.Color.WhiteSmoke
    19. Me.ColumnHeadersDefaultCellStyle = Style2
    20. Me.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
    21. Me.Location = New System.Drawing.Point(194, 172)
    22. Me.Name = "EDGV1"
    23. Me.RowHeadersDefaultCellStyle = Style2
    24. Me.RowsDefaultCellStyle = Style3
    25. Me.RowTemplate.Height = 30
    26. Me.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect
    27. Me.Size = New System.Drawing.Size(416, 150)
    28. End Sub
    29. End Class


    Gruß
    Michl

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „michl75“ ()

    Ich rate davon ab, Dgv zu beerben.
    Mach lieber eine ControlStyling-Methode, die alle Dgvs einheitlich styled. Sieht bei mir in jedem Projekt ähnlich aus, aber nicht ganz:

    VB.NET-Quellcode

    1. Public Class ControlStyling
    2. Public Shared Sub StyleControls(frm As Form)
    3. Dim getChilds As Func(Of Control, System.Collections.IEnumerable) = Function(ctl) ctl.Controls '.Controls
    4. For Each ctl In getChilds.All(frm)
    5. Dim grd = TryCast(ctl, DataGridView)
    6. If grd.NotNull Then
    7. Dim tbl = DirectCast(DirectCast(grd.DataSource, BindingSource).List, DataView).Table
    8. For Each dgvCol As DataGridViewColumn In grd.Columns
    9. Dim dataCol = tbl.Columns(dgvCol.DataPropertyName)
    10. If dataCol.DataType = GetType(Decimal) Then
    11. With dgvCol.DefaultCellStyle
    12. .Alignment = DataGridViewContentAlignment.MiddleRight
    13. .Format = "c"
    14. .Font = New Font("Courier New", If(.Font, If(grd.DefaultCellStyle.Font, grd.Font)).Size)
    15. End With
    16. End If
    17. Next
    18. grd.RowHeadersWidth = 25
    19. grd.Attach.UnFocusedSelectionColor()
    20. grd.CellBorderStyle = DataGridViewCellBorderStyle.None
    21. grd.AllowUserToOrderColumns = False
    22. grd.AllowUserToResizeColumns = False
    23. grd.AllowUserToResizeRows = False
    24. AddHandler grd.KeyDown, AddressOf DatagridViewBehavior.DefaultValueOnDelete_KeyDown
    25. End If
    26. Dim tb = TryCast(ctl, TextBox)
    27. If tb.NotNull Then
    28. ' man kann hier auch andere Controls stylen, nicht nur DGV
    29. End If
    30. Next
    31. End Sub
    32. End Class

    Dazu diese Extensions:

    VB.NET-Quellcode

    1. <Extension()> _
    2. Public Function AllChilds(Of T)( _
    3. GetChilds As Func(Of T, IEnumerable), _
    4. Roots As IEnumerable) As IEnumerable(Of T)
    5. Dim Enumerate As Func(Of IEnumerable(Of T), IEnumerable(Of T)) = Nothing
    6. Enumerate = Function(enmbl) enmbl.Concat(enmbl.SelectMany(Function(nd) Enumerate(GetChilds(nd).Cast(Of T))))
    7. Return Enumerate(Roots.Cast(Of T))
    8. End Function
    9. <Extension()> _
    10. Public Function All(Of T)( _
    11. GetChilds As Func(Of T, IEnumerable), Root As T) As IEnumerable(Of T)
    12. 'Root wird in die Enumeration hineingenommen, indem ein es enthaltendes IEnumerable(Of T)
    13. 'geschaffen wird, dessen Kinder ( = nur Root ) rekursiv enumeriert werden
    14. Return GetChilds.AllChilds(New T() {Root})
    15. End Function
    Ja das habe ich gemerkt. Erben war keine gute Idee.
    Gut das ich ne Sicherung hatte :)

    Danke für deinen Hinweis und deinen Code! ... ich werde den mal in einem Testprojekt mal übernehme, durchgehen was da alles so passiert und dann versuchen anzupassen. Der Tipp ist glaub ich Gold wert :)


    Danke Michl