Inhalt von Registerkarten passen ihre Größe nicht an

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

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von tron25.

    Inhalt von Registerkarten passen ihre Größe nicht an

    Hallo,

    ich habe ein Formular mit einem Tabcontrol mit 4 Registerkarten. Auf jeder der Registerkarten befinden sich mehrere Labels, Datagridviews und Schaltflächen. Im Resize_Ereigniss des Formulares werden die Größen und Positionen der Elemente an die neue Größe errechnet und die Elemente bekommen die entsprechenden Werte zugewiesen. Das Problem ist, daß die neuen Größen und Positionen nur dann korrekt angewendet werden, wenn beim Ändern der Formulargröße die erste Registerkarte aktiviert ist. Wenn ich beispielsweise das Programm starte, auf die zweite Registerkarte wechsele und dann erst das Formular anpasse, wird zwar die Größe des Tabcontrolls angepasst, aber die Listen, Labels und Schaltflächen auf allen Registerkarten verändern sich nicht. Wenn das Programm gestartet wird und dann schon das Formular maximiert wird, dann paßt sich nicht nur das Tabcontrol, sondern auch alle Elemente an die neue Größe an.

    Ausschnitt des Quellcodes:

    VB.NET-Quellcode

    1. Private Sub ErgebnisseFormular_Resize(sender As Object, e As EventArgs) Handles Me.Resize
    2. Dim Breite As Integer
    3. Dim HoeheGross As Integer
    4. Dim HoeheKlein As Integer
    5. Dim Zwischenraum As Integer
    6. Zwischenraum = 10
    7. ErgebnisseTab.Left = Zwischenraum
    8. ErgebnisseTab.Top = Zwischenraum
    9. ErgebnisseTab.Width = Me.ClientSize.Width - (Zwischenraum * 2)
    10. ErgebnisseTab.Height = Me.ClientSize.Height - SchliessenBefehl.Height - (Zwischenraum * 3)
    11. SchliessenBefehl.Left = Me.ClientSize.Width - SchliessenBefehl.Width - Zwischenraum
    12. SchliessenBefehl.Top = ErgebnisseTab.Bottom + Zwischenraum
    13. Breite = (SchuetzenTab.ClientSize.Width - (Zwischenraum * 4)) / 3
    14. HoeheGross = SchuetzenTab.ClientSize.Height - JugendLabel.Height - JugendVorschauBefehl.Height - (Zwischenraum * 4)
    15. HoeheKlein = (SchuetzenTab.ClientSize.Height - (Zwischenraum * 10) - (JugendLabel.Height * 3) - (RingeJugendVorschauBefehl.Height * 3)) / 3
    16. JugendLabel.Left = Zwischenraum
    17. JugendLabel.Top = Zwischenraum
    18. JugendListe.Left = Zwischenraum
    19. JugendListe.Top = JugendLabel.Bottom + Zwischenraum
    20. JugendListe.Width = Breite
    21. JugendListe.Height = HoeheGross
    22. JugendVorschauBefehl.Left = JugendListe.Left
    23. JugendVorschauBefehl.Width = (Breite - Zwischenraum) / 2
    24. JugendVorschauBefehl.Top = JugendListe.Bottom + Zwischenraum
    25. JugendDruckenBefehl.Left = JugendVorschauBefehl.Right + Zwischenraum
    26. JugendDruckenBefehl.Width = JugendVorschauBefehl.Width
    27. JugendDruckenBefehl.Top = JugendVorschauBefehl.Top
    28. ...


    Wenn ich alle Elemente aus dem tabcontrol entferne und direkt in das Formular einfüge, funktioniert es. Gibt es evtl. eine Update-Eigenschaft oder etwas Anderes eines tabcontrols, was die aktualisierung beeinflußt? Was ist der Unterschied zwischen der ersten Registerkarte zu den Anderen?

    Vielen Dank schon einmal im Voraus für eure Hilfe.
    Warum arbeitest Du nicht mit Dock und/oder Anchor? Dadurch sagt man den CEs:

    Hey, Ihr werdet an (z.B.) den rechten und linken Rand des Formulars "angetackert". Wenn sich das Formular größentechnisch verändert, dann macht Ihr die Größenänderungen gefälligst mit!

    Das funktioniert ohne eine Zeile eigenen Code. Einfach in den TabControl-Eigenschaften einstellen. Und in den anderen CEs auch.
    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.
    Es gibt beispielsweise drei Datagridviews nebeneinander. Mit Anchor könnte ich die beiden äußeren an ihre Ränder binden. Das Mittlere Element hätte dann aber ein Problem, da nach dem Maximieren die Abstände zu den äußeren Rändern größer wäre. Ich habe es gerade versucht. Leider funktioniert es nicht.
    Wenn die äußeren z.B. per Dock an den linken bzw. rechten Rand angetackert sind und das mittlere per Anchor nach rechts und links, dann läuft es bei mir sehr gut:
    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.