Ein Steuerelement wird vom Layout nicht angeordnet
In der Formularansicht bleibt ein Steuerelement an seiner Entwurfsposition, während sich die anderen Bereiche eines
WklDockLayout oder die andere Seite eines WklSplitter bewegen; oder es bewegt sich zunächst mit und weicht dann
von der Anordnung ab, wenn sich die Fenstergröße ändert; oder ein Bereich fehlt in PaneNames, FirstAreas oder
SecondAreas.
Umgebung
WKL Forms Object Library ab 1.16 (WklSplitter) und 1.17 (WklDockLayout), Access-Formulare sowie UserForms in Excel und Word.
Ursache
Die Bereiche werden aus Panes übernommen (beim Splitter aus FirstControls und SecondControls) oder, wenn diese
leer sind, beim ersten Anzeigen des Formulars in der Formularansicht anhand ihrer Lage ermittelt:
- Andocklayout: Es zählen nur sichtbare Steuerelemente im selben Formularbereich wie das Layout, die innerhalb seines Rechtecks liegen. Sie werden der Reihe nach von seinen Rändern abgenommen – ein Steuerelement entlang eines ganzen Rands, das schmalste zuerst; das größte verbleibende Steuerelement füllt den Rest. Ein Steuerelement, das keinen Rand des verbleibenden Raums berührt oder teilweise außerhalb des Layouts liegt, ist kein Bereich.
- Splitter: Es zählen nur Steuerelemente seines Formularbereichs, die innerhalb von 20 Pixeln (300 Twips) neben der Leiste liegen; ein Steuerelement über oder unter beiden Bereichen ist kein Nachbar.
- Von Hand gesetzte Verankerungen: Der Splitter rechnet mit den Entwurfspositionen und braucht seine Bereiche oben links verankert; ein rechts oder unten verankertes Steuerelement streckt Access, ohne das Objektmodell zu informieren. Das Andocklayout setzt die Verankerungen seiner Bereiche selbst anhand ihrer Lage (links, beide, rechts); nachträglich von Hand geänderte Verankerungen passen nicht mehr zu den Zonen.
- Einmal gelesene Positionen: Der Entwurf wird je Öffnen einmal gelesen. Steuerelemente, die Code danach verschiebt, werden erst nach
Refreshberücksichtigt. - Durch Code ausgeblendet: Ein über
Visibleausgeblendetes Steuerelement behält seinen Platz im Layout; nur ein zugeklappter Bereich (PaneCollapsed) überlässt ihn den anderen.
Lösung
- Prüfen Sie, welche Bereiche das Steuerelement verwendet:
Debug.Print Me!Layout1.Object.PaneNames(Formular- oder Entwurfsansicht) oder beim SplitterFirstAreasundSecondAreasin der Formularansicht. - Öffnen Sie den Designer (
[...]in der Zeile Benutzerdefiniert): Die Seite Bereiche (Layout) bzw. Trennleiste (Splitter) zeigt die gefundenen Bereiche und eine aus den Steuerelementen des Formulars gezeichnete Vorschau. Beim Layout schreibt Nach Lage übernehmen die gefundenen Bereiche inPanes; korrigieren Sie dort Zonen und Namen. - Benennen Sie die Bereiche ausdrücklich, wo die Lage nicht eindeutig ist:
Panes(zum BeispiellstNav=Left; sfHaupt=Fill) oderFirstControlsundSecondControls. - Splitter: Setzen Sie die Verankerung der Bereiche beider Seiten auf Oben links. Andocklayout: Setzen Sie keine Verankerungen von Hand; schalten Sie im Designer Beim Übernehmen einrichten ein und bestätigen Sie mit OK, dann werden die Verankerungen aller Bereiche anhand ihrer Lage gesetzt.
- Hat Code Bereiche dauerhaft verschoben, rufen Sie
Refreshauf; um einen Bereich wegzunehmen, setzen SiePaneCollapsedstattVisible.
de/wiki/msaccess/comctl/troubleshooting/control-not-arranged-by-the-layout.txt · Last modified: by Wolfgang van der Stille