none
FlowLayoutPanel DisplayRectangle passt sich nicht an RRS feed

  • Frage

  • Hallo liebe Community,

    ich habe derzeit ein merkwürdiges Problem mit meinem FlowLayoutPanel.

    Situation

    Auf meinem Windows Fenster befindet sich ein FlowLayoutPanel (FLP), indem ich mehrere Steuerelemente vertikal auflisten möchte. Wenn es mehr Elemente werden, als das Fenster anzeigen kann, soll die vertikale Bildlaufleiste des FLPs zum Einsatz kommen.

    Da all die Elemente die gleiche Breite haben sollen und das FLP in der verfügbaren Breite ausfüllen sollen, habe ich folgende Methode geschrieben, die beim Auslösen des ClientSizeChanged-Ereignisses des FLP ausgelöst wird.

    Private Sub FLP_ClientSizeChanged()
        Dim NewWidth = Me.FLP.ClientSize.Width - Me.FLP.Padding.Horizontal
        For Each Control As Control In Me.FLP.Controls
            Control.Size = New Size(NewWidth, Control.Height)
        Next
    End Sub

    In der Methode wird also die verfügbare Breite im FLP berechnet und auf jedes enthaltene Steuerelement angewendet.

    Problem

    Wenn ich die Größe des Windows Fensters manuell verändere, also über die unten-rechte Fensterecke, dann funktioniert alles wie gewünscht.

    Wenn ich das Fenster maximiert habe und dann die Größe automatisch verändere, also über einen Doppelklick auf die Fenstertitelleiste oder mit einem Klick auf die Fenstergröße-wiederherstellen-Schaltfläche, dann produziert sich der Fehler.

    Das FLP und die Steuerelemente darin haben die richtige Breite von ca. 500 px, beides bereits nachgeprüft. Nur ist das FLP trotzdem horizontal verschiebbar. Wie sich mir ergibt, gibt die DisplayRectangle-Eigenschaft des FLP nicht wie richtigerweise einen Breiten-Wert von ca. 500 px aus (so wie das FLP und die Steuerelemente), sondern einen Breiten-Wert von ca. 1600 px (so wie das FLP und die Steuerelemente bei maximiertem Fenster). Deswegen meint das FLP also, einen verschiebbaren Inhalt zu enthalten.

    Durch die automatische Größenänderung des Fensters scheint mir die DisplayRectangle-Eigenschaft des FLP nicht angepasst zu werden.

    Hinzu tritt, dass die DisplayRectangle-Eigenschaft selbst nur ReadOnly ist und auch keine anderweitige, öffentliche Set-Methode benutzbar ist, das heißt, ich kann die Eigenschaft auch nicht manuell korrigieren.

    Meine Frage

    Mache ich hier irgendeinen Fehler im Code oder ist das ein Fehler in der Programmierung des FLP, und wie kann ich dem Fehler entgegenwirken?

    Vielen Dank für eure Antworten!

    Martin


    Wupp Wupp! Fnak Fnak!

    Dienstag, 25. Dezember 2018 11:19

Antworten

  • Hallo Martin,

    Ich habe dieses Problem gerade reproduziert und das von Dir beschriebene Verhalten beobachtet. In einem Textfeld habe ich die Breite und Höhe der DisplayRectangle-Eigenschaft anzeigen lassen, wobei die Höhe gleich nach der Wiederherstellung des Fensters richtig angepasst wird, während die Breite sich nur um wenige Prozent verringert (1336 -> 1312).

    Eine Problemumgehung, die die Deaktivierung der horizontalen Bildlaufleiste bewirkt, findest Du in diesem Thread. Ich führe sie der Vollständigkeit halber auch hier an:

    panel.HorizontalScroll.Maximum = 0
    panel.AutoScroll = False
    panel.VerticalScroll.Visible = False
    panel.AutoScroll = True

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Mittwoch, 2. Januar 2019 12:48
    Moderator

Alle Antworten

  • Hallo Martin,

    Welche Werte haben die Eigenschaften WrapContents und FlowDirection des FlowLayoutPanels? Ist die Dock-Eigenschaft auf Fill festgelegt?

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Donnerstag, 27. Dezember 2018 13:26
    Moderator
  • Hallo Dimitar,

    folgende Eigenschaften habe ich vom Standard abweichend gesetzt:

    • AutoScroll = True
    • Dock = Fill
    • FlowDirection = TopDown
    • WrapContents = False

    Gruß,

    Martin


    Wupp Wupp! Fnak Fnak!


    Donnerstag, 27. Dezember 2018 14:46
  • Hallo Martin,

    Ich habe dieses Problem gerade reproduziert und das von Dir beschriebene Verhalten beobachtet. In einem Textfeld habe ich die Breite und Höhe der DisplayRectangle-Eigenschaft anzeigen lassen, wobei die Höhe gleich nach der Wiederherstellung des Fensters richtig angepasst wird, während die Breite sich nur um wenige Prozent verringert (1336 -> 1312).

    Eine Problemumgehung, die die Deaktivierung der horizontalen Bildlaufleiste bewirkt, findest Du in diesem Thread. Ich führe sie der Vollständigkeit halber auch hier an:

    panel.HorizontalScroll.Maximum = 0
    panel.AutoScroll = False
    panel.VerticalScroll.Visible = False
    panel.AutoScroll = True

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Mittwoch, 2. Januar 2019 12:48
    Moderator
  • Hallo Dimitar,

    es ist schon einmal beruhigend zu wissen, dass der Fehler nicht nur bei mir vorkommt.

    Deine Lösung habe ich inzwischen implementiert, indem ich die vier Zeilen in meine Methode angefügt hab. Ich muss zugeben, sie funktionieren tadellos! Warum genau sie funktionieren, verstehen ich leider irgendwie nicht.

    Mich würde interessieren, wie Du auf diesen Thread gekommen bist. In meiner Recherche (auch über das Ausblenden der horizontalen Bildlaufleiste) bin ich nicht auf ihn gestoßen.

    Neugierig bin ich jetzt natürlich auch, wie dieser Fehler im FLP-Code zu Stande kommt, aber ob ich das je erfahren kann, steht wohl in den Sternen.

    Auf jeden Fall vielen Dank für die Hilfe!

    Gruß,

    Martin


    Wupp Wupp! Fnak Fnak!

    Donnerstag, 3. Januar 2019 12:08