Usercontrol-Breite and Flowlayoutpanel anpassen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Nils_Kr.

    Usercontrol-Breite and Flowlayoutpanel anpassen

    Hi,

    ich habe in der Laufzeit generierte Usercontrols, die sich automatisch an die Breite des übergeordneten FlowLayoutPanels anpassen sollen.
    Autosize macht das Control immer nur so breit wie nötig, ich hätte aber gerne sowas wie fill damit das Control immer die maximale Breite hat.
    Ich würde die Breite nur ungern per Befehl ändern, da sowas fast immer verzögert reagiert.
    Vielleicht hat ja jemand ne Idee, wie man das über den Designer lösen kann.

    E: Ich hab bei bei einem manuell eingefügten UserControl Anchor auf Top, Left und Right gesetzt und mit Autosize an & aus probiert. Aber die
    Breite ändert sich leider nicht. Max. Size ist keine gesetzt. Das FlowLayoutPanel selbst ändert sich in der Größe.
    Option strict = on

    If it's stupid and it works it ain't stupid.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Nils_Kr“ ()

    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Jain. Vielleicht kann ich eine Regel festlegen, die für alle generierten Controls gilt.

    Ich möchte die Breite der Usercontrols nicht manuell festlegen müssen.

    Wenn ich ein UserControl in ein normales Panel einfüge und Anchor Left,Right festlege skaliert es brav mit. Es muss also am FlowLayoutPanel selbst liegen.

    E: Ich glaub ich hab jetzt den Grund des Problems gefunden. Das FlowLayoutpanel versucht immer die einzelnen Elemente auch nebeneinander zu gliedern,
    daher werden vorhandene Elemente nicht verbreitert. Daher meine Frage:
    Wie bekomme ich es hin, dass die Elemente nur übereinander angeordnet werden und in der Breite skalieren können. Die Anchor-Property ist ja vorhanden.
    Option strict = on

    If it's stupid and it works it ain't stupid.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    Afaik passen sich alle Controls von der Größe an das erste an. Also ist es vll das beste im FlowLayoutPanel_Layout Event immer das erste Control (falls es existiert) von der Breite (oder Höhe, je nach FlowDirection) entsprechend zu setzen:

    VB.NET-Quellcode

    1. private sub flowlayoutpanel1_layout()
    2. if flowLayoutPanel1.Controls.Count > 0 then
    3. flowLayoutPanel1.Controls(0).width = flowLayoutPanel1.DisplayRectangle.Width - lowLayoutPanel1.Controls(0).Margin.Horizontal
    4. end if
    5. end sub


    Die anderen Controls einfach mit Dock Style auf Top rein dann.
    Was besseres fällt mir nicht ein

    LG
    Das ist meine Signatur und sie wird wunderbar sein!
    hmm, bei nem Tablelayoutpanel muss man halt immer extra eine Zeile einfügen und automatische Scrollbars sind auch zickig.
    Ich glaub da setz ich lieber die Breite im Flowpanel manuell fest.

    E: Bei Dock Top in einem normalen Panel wird leider die Margin-property ignoriert und die Dinger hängen aufeinander.
    Option strict = on

    If it's stupid and it works it ain't stupid.

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