Laden...

Control Stretch & Scrollable: Überschneidungen

Erstellt von trib vor 8 Jahren Letzter Beitrag vor 8 Jahren 912 Views
T
trib Themenstarter:in
708 Beiträge seit 2008
vor 8 Jahren
Control Stretch & Scrollable: Überschneidungen

Hallo zusammen,

ich habe eine klassische Form mit ein paar Controls (Top, Left).
Darunter befindet sich eine multiline Textbox (Stretch, Stretch), welche sich den Platz nehmen soll, der vorhanden ist.
Wiederum darunter gibt es ein paar Menü-Button (Bottom, Left/Right).

Bisher war der Bildschirm nur minimal kleiner als die von mir vorgesehene Größe, oder größer. Beides kein Problem!

Nun habe ich den ersten Fall, dass diese Form auf einer Anzeige im Querformat dargestellt werden soll. Also so niedrig, dass einige Controls abgeschnitten werden.

Meine Quick & Dirty Lösung war ab einem gewissen Schwellenwert eine Scrollbar einzublenden.
Dann funktioniert aber weder Stretch, noch Bottom als Ausrichtung. Die Controls überlappen sich mit den Top-Controls, bzw. werden auf ein Minimum verkleinert.

Natürlich würde ich ungern für diesen einen Fall auf den "Luxus" verzichten, bei größeren Anzeigen auch mehr Text lesen zu können.
Auch alle Controls in einer Schleife auf Top & Left zu setzen finde ich nicht so elegant.

Wie könnte da ein einigermaßen eleganter Workaround aussehen?

771 Beiträge seit 2009
vor 8 Jahren

Packe mal alle Controls auf ein Panel und gib dort eine MinimumSize vor - und entsprechend AutoScroll aktivieren (für Form und/oder Panel).

T
trib Themenstarter:in
708 Beiträge seit 2008
vor 8 Jahren

Der Vollständigkeit halber:

Leider läuft meine Applikation auch mit dem CompactFramework, wo es MinimumSize nicht gibt.
Daher musste ich doch den unschönen Weg gehen, die Controls zu manipulieren.

    public static class AutoScroll
    {
        public static void SetForm(Form form)
        {
            SetControls(form.Controls);
            form.AutoScroll = true;
        }

        public static void SetControls(Control.ControlCollection controls)
        {
            foreach (Control control in controls)
            {
                if ((control.Anchor & AnchorStyles.Bottom) == AnchorStyles.Bottom && (control.Anchor & AnchorStyles.Top) != AnchorStyles.Top)
                    control.Anchor = AnchorStyles.Top;
                if (control.Controls.Count > 0)
                    SetControls(control.Controls);
            }
        }
    }

Die Änderung sollte vor dem setzen von AutoScroll durchgeführt werden.
Aufgerufen wird die Funktion, wenn ein gewisser Toleranzwert mit der Höhe der Form unterschritten wird.
Bei TabControls müsste man noch eine Ausnahme machen, da man i.d.R. innerhalb des Tabs die Scrollbar haben möchte und nicht außerhalb.