Wie kann man das ListBox-IntegralHeight-Verhalten auch im DGV haben?

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

    Wie kann man das ListBox-IntegralHeight-Verhalten auch im DGV haben?

    Hallo zusammen,

    die WinForms-ListBox hat ein nettes Verhalten, welches ich auch gern im DGV hätte: IntegralHeight. Da werden bei True immer nur ganze Zeilen angezeigt. Da ich häufig mit nem DGV arbeite, darin konstante Schrift und einzeiligen Inhalt verwende, würd ich das gerne auch so im DGV haben. Leider sind meine Versuche bisher gescheitert:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Friend Class DGV : Inherits DataGridView
    2. Private FlowingHeight As Integer = 0
    3. Private LatestHeight As Integer = 0
    4. Private IgnoreSizeChange As Boolean = False
    5. Protected Overrides Sub OnSizeChanged(e As EventArgs)
    6. If FlowingHeight = 0 AndAlso LatestHeight = 0 Then
    7. FlowingHeight = Height
    8. LatestHeight = Height
    9. End If
    10. If Not IgnoreSizeChange Then
    11. IgnoreSizeChange = True
    12. Dim Offset = Height - LatestHeight
    13. FlowingHeight += Offset
    14. Height = ((FlowingHeight - If(ColumnHeadersVisible, ColumnHeadersHeight, 3)) \ RowTemplate.Height) * RowTemplate.Height + If(ColumnHeadersVisible, ColumnHeadersHeight, 3)
    15. LatestHeight = Height
    16. End If
    17. MyBase.OnSizeChanged(e)
    18. IgnoreSizeChange = False
    19. End Sub
    20. End Class


    Im Designer wird zwar bei einem freistehenden DGV - wenn auch ruckelig - die richtige Größe eingestellt und Anchor Bottom+Up funktioniert super, auch Docking ist akzeptabel. Aber spätestens, wenn man das freistehende DGV am oberen Rand anfasst und es in der Größe verändert, wird's Mus. Ich werd das Gefühl nicht los, dass ich die Sache falsch angehe. Hat mir jemand einen Tipp, wie ich das gewünschte Verhalten in WinForms-.NET-FX erreichen kann? Aus dem ListBox-SourceCode wurde ich leider nicht schlau :(
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.