Bei der Konfiguration von Masken muss unterschieden werden zwischen Controls, die auf Basis ihres Inhaltes selbst eine Wunschgröße ermitteln können, und Controls, denen Ihre Größe von außen vorgegeben werden muss.
Ein Beschriftungslabel ist das grundlegende Beispiel für einen Control, der seinen Größe auf Basis seines Inhaltes bestimmt.
Je nach Inhalt des Labels, der verwendeten Schriftart und -größe, sowie dem aktuellen Zoomfaktor, berechnet der Control die Größe, die zur Darstellung seines Inhaltes erforderlich ist.
Eine Vorgabe einer abweichende Größe über den Zellenkonfigurationsdialog ist bei einem Label nicht erforderlich und nicht wünschenswert.
In diesem Beispiel wurden die Label "Vorgangstyp", "Auftragsart" und "Rechnung" definiert.
Jeder der drei Controls berechnet auf Grund seines enthaltenen Textes seine eigene Größe.
Dadurch, dass die drei Labels in dem Panel alle in einer Spalte liegen, bestimmte sich die Breite der Spalte auf Basis des breitesten enthaltenen Controls.
Wird der Inhalt eines Labels breiter, ändert sich dadurch auch die Breite der Spalte des Panels und alle Controls in der nächsten Spalte rücken weiter nach rechts.
Textboxen kennen die interne Breite des mit ihnen verbundenen Datenfeldes und berechnen daraus die Ihre eigene Größe im Panel.
Die hier verwendeten KombiInput-Controls, bestehend aus einer Textbox, einer Auswahlschaltfläche und einem DisplayField, berechnen ihre Größe auf Basis ihrer Inhalte. Für die DisplayFields wird der in den verknüpften Auswahllisten enthaltene Text gemessen.
Aus der Summe aller im Panel konfigurierten Controlgrößen ergibt sich die Größe des Panels. So kann auch ein Panel berechnen, wieviel Breite oder Höhe es in seinem Vaterpanel benötigt.
Vorgabe einer abweichenden Controlgröße
Durch Vorgabe einer vom Standard abweichenden Controlgröße kann der automatische Berechnungsalgorhythmus von Controls beeinflusst werden.
Über den Zellenkonfigurationsdialog kann entweder eine Größe in "Pixeln" vorgegeben werden oder eine Größe in "Prozent".
Die Größenangabe in Prozent steht nicht bei jedem Control zur Verfügung. Die Prozentangabe bezieht sich dabei auf die Breites des ActiveSkin Hauptfensters, also quasi auf den insgesamt zur Verfügung stehenden Platz.
Einem Panel kann generell keine Größe vorgegeben werden, da sich die Panelgröße immer aus der Summe der enthaltenen Controls berechnet.
Wurde dem Control eine manuelle Größe gegeben, erscheinen rechts und unterhalb des Controls Drag-Schaltflächen, die eine Einstellung der Controlgröße mit der Maus erlauben.
Im Zellenkonfigurationsdialog kann für den konfigurierten Control eine Zellenausrichtung festgelegt werden.
Horizontal kann dabei zwischen Left, Center, Right und Max gewählt werden.
Vertikal zwischen Top, Center, Bottom und Max.
Dementsprechend wird der enthaltene Control innerhalb seiner Zelle ausgerichtet, sofern diese mehr als den benötigten Platz bietet.
In diesem Beispiel wurde der letzte Control mit der horizontale Ausrichtung "Right" angelegt.
Die Angabe "Max" legt fest, dass der Control auf die Breite bzw. Höhe seiner Zelle maximiert wird.
Auch ganze Panels können durch die horizontale Zellenausrichtung beeinflusst werden:
Definition zweier Panels ohne Zellenausrichtung:
Definition der Panels unter Verwendung der Zellenausrichtung "Max".
Dadurch können untereinander liegende Panels sehr leicht in einer einheitlichen Breite dargestellt werden.
Unterschied zwischen Größenvorgabe und Größenermittlung über den Inhalt eines Controls
Einige Controls können entweder so eingestellt werden, dass sich ihre Größe über die Summe der Größen Ihrer Kinder berechnet oder indem dem Control eine Größe vorgegeben wird und er dann versucht, seine enthaltenen Kinder in der vorgegebenen Größe darzustellen.
Ein Beispiel dazu ist ein TabControl.
Nachfolgend ist ein TabControl so konfiguriert, dass er seine Größe durch die Summe der Größen seiner Kindern erhält, indem im Zellenkonfigurationsdialog für den TabControl keine Größen vorgegeben wurden.
Ist der erste Tab aktiviert, benötigt der TabControl insgesamt die Summe der Kinder der ersten Seite.
Ist der zweite Tab aktiv, berechnet sich die Größe des TabControls über die Summe der Kinder der zweiten Seite.
Alternativ kann im Zellenkonfigurationsdialog des TabControl eine Größe vorgegeben werden.
Der TabControl wird nun in der vorgegebenen Größe dargestellt.
Wird eine Seite aufgerufen, die nicht in den vorgegebenen Rahmen passt, werden ScrollBars angezeigt.
ActiveSkin WinForms kompatible Größeneinstellung
Im alten ActiveSkin WinForms gab es eine Sonderfunktion, die dafür gesorgt hat, dass ein Panel automatisch auf den Größenmodus Horizontal:Max und Vertikal:Max eingestellt wurden, sofern es das einzige Kind seines Vaters war. Dies führte vor allem dazu, das Inhalte in TabPages automatisch auf die Größe der TabSeite expandierten, obwohl für das entsprechende Panel keine Max-Angabe eingestellt waren.
Um in diesem Fall eine Kompatibilität zu ActiveSkin WinForms zu gewährleisten, wurde diese Sonderbehandlung ebenfalls realisiert.
Da es aber zu ungewollten Nebeneffekten durch diese Sonderbehandlung kommen kann, kann diese im Zellenkonfigurationsdialog auch abgeschaltet werden.
Controls, die die Größe ihrer Kinder beeinflussen
Ein SplitPanel ist ein Beispiel für einen Control, der die Größe seiner Kinder verändert.
Je nachdem, wie der Benutzer den Slider des SplitPanels einstellt, wird der zur Verfügung stehende Platz auf die Kinder es Controls verteilt.
Üblicherweise befindet sich in einem SplitPanel nur jeweils ein einzelner Control, der auch direkt von Größenänderungen profitieren kann.
Die SOG ERP Suchmasken sind so designt, dass ObjectSelector, ObjectList, PropertyGrid und ImageControl jeweils als einzelnes Kind in einem SplitPanel liegen.
Da jedes Splitpanel nur einen Slider besitzt, kann durch ineinander schachteln von SplitPanels ein komplexeres Design erreicht werden.
Eine SOG ERP Suchmaske besteht im allgemeinen aus 3 ineinander verschalteten Split Panels. Nur dem obersten Panel wird dabei eine Größe vorgegeben (100% Höhe, 100% Breite oder etwas weniger)
Alle anderen Controls bekommen ihre Größe jeweils durch ihren Vater-Control.
Angleichen von Spaltengrößen über Panels hinweg
Über die Eigenschaften eines Panels kann gesteuert werden, dass die Breiten einer bestimmten Anzahl von Spalten über Panelgrenzen hinweg aufeinander ausgerichtet werden sollen.
Über die Eigenschaften "Globale Spaltenbreite Anzahl Spalten und Globale Spaltenbreite Gruppenname kann eingestellt werden, dass die Breite von Spalten mit dem gleichen Gruppennamen immer gleich sein soll.
Wird versucht, die Spaltengrößen eines Vaterpanels und eines seiner Kinder aufeinander auszurichten, kann dies zu einer Situation führen, die die korrekte Darstellung der Maske verhindert.
Dadurch dass im Kinderpanel eine Spalte größer wird, verändert sich die Größe des Kinderpanels. Dadurch wird die Spalte des Vaterpanels (in dem das Kind liegt) größer, dadurch muss die Spalte im Kinderpanel erneut vergrößert werden. Usw.
Dieser Vorgang wird automatisch erkannt und mit der Meldung "Panel xxx wurde in der Größe begrenzt" abgebrochen.
In diesem Fall sind die Gruppennamen entsprechend zu ändern.