Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 2/2016.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Textfelder mit flexibler Höhe

Es ist seit jeher ein Wunsch der Access-Entwickler, Steuerelemente zum Beispiel dynamisch an die Größe des umgebenden Formulars anzupassen. Microsoft hat dem Rechnung getragen, indem es mit der Version 2007 die beiden Eigenschaften »Horizontaler Anker« und »Vertikaler Anker« für Steuerelemente hinzugefügt hat. Damit lässt sich allerdings immer nur ein Steuerelement in der horizontalen und der vertikalen Ebene in der Größe anpassen – doch was ist, wenn das Formular mehrere Steuerelemente besitzt, die abwechselnd größer dargestellt werden sollen? Dieser Beitrag zeigt, wie dies gelingt.

Textfelder verankern

Das Verankern von Textfeldern gibt es in Access ja schon immer – allerdings nur das Verankern am linken und oberen Rand. Seit Access 2007 können Sie in zwei speziellen Eigenschaften namens Horizontaler Anker und Vertikaler Anker die drei Werte Links, Rechts und Beide beziehungsweise Oben, Unten und Beide auswählen. Wenn Sie also etwa wünschen, dass ein Textfeld wie das aus Bild 1 beim Vergrößern des Formulars ebenfalls vergrößert wird, müssen Sie nur die beiden Eigenschaften auf den Wert Beide einstellen.

Einstellen der Anker für ein Textfeld

Bild 1: Einstellen der Anker für ein Textfeld

Wenn Sie das Formular dann allerdings ohne weitere Anpassungen vergrößern, treten die zwei Probleme wie in Bild 2 auf: Das Bezeichnungsfeld des Textfeldes wird nach rechts und nach unten verschoben und die Schaltfläche OK wird allmählich vom Textfeld überdeckt.

Probleme beim Vergrößern

Bild 2: Probleme beim Vergrößern

Es reicht also niemals aus, einfach nur die Eigenschaften Horizontaler Anker und Vertikaler Anker des betroffenen Steuerelements einzustellen. Für die Steuerelemente, die sich rechts oder unter dem zu vergrößernden Steuerelement befinden, müssen Sie die Eigenschaft Horizontaler Anker auf Rechts und die Eigenschaft Vertikaler Anker auf Unten einstellen.

Außerdem passt Access automatisch die Eigenschaften von Bezeichnungsfeldern an, sofern dem zu vergrößernde Steuerelement eines zugewiesen ist. In unserem Falle gehört ein Bezeichnungsfeld dazu, das für die Eigenschaft Horizontaler Anker nun den Wert Rechts statt wie zuvor Links und für die Eigenschaft Vertikaler Anker nun den Wert Unten statt Oben aufweist.

Also müssen Sie sowohl die rechts und unter den zu vergrößernden Steuerelementen befindlichen Steuerelemente anpassen als auch die automatisch erfolgten Anpassungen der Bezeichnungsfelder der zu vergrößernden Steuerelemente wieder rückgängig machen.

Zwei Textfelder verankern

Wenn ein Formular zwei Textfelder enthält, deren Größe sich ändern soll, stellen wir einfach für beide die Eigenschaften Horizontaler Anker und Vertikaler Anker auf Beide ein (s. Bild 3).

Zwei Textfelder mit gleichen Anker-Einstellungen

Bild 3: Zwei Textfelder mit gleichen Anker-Einstellungen

Das Ergebnis ist allerdings nicht wie gewünscht: Beide Textfelder vergrößern sich zwar wie beabsichtigt nach rechts, aber nach unten erfolgt eine Überlappung – das obere Textfeld legt sich über das untere (s. Bild 4).

Beim Vergrößern überlappen sich die Textfelder.

Bild 4: Beim Vergrößern überlappen sich die Textfelder.

Damit steht fest: Wir können tatsächlich nur eine Reihe von Steuerelementen in der horizontalen und vertikalen Ebene vergrößern lassen. Zwei nebeneinander liegende Steuerelemente lassen sich ebenso wenig beide horizontal vergrößern wie zwei untereinander liegende Steuerelemente in der vertikalen Ebene.

Textfelder abwechselnd vergrößern

Letztlich geht es ja beim Verankern um ein Anpassen der Größe der Textfelder, um mehr Inhalt anzuzeigen. Es stellt sich also die Frage, ob man nicht auch vernünftig mit dem Formular arbeiten kann, wenn jeweils nur eines der Textfelder vergrößert dargestellt wird. Soll nur ein Textfeld verankert werden, gelingt das ja problemlos, wie Bild 5 zeigt.

Wenn nur ein Textfeld oben und unten verankert wird, klappt es.

Bild 5: Wenn nur ein Textfeld oben und unten verankert wird, klappt es.

Was aber, wenn der Benutzer nun mehr Inhalt des unteren Textfelds sehen will? Können wir zur Laufzeit die Verankerungseigenschaften beeinflussen, etwa indem wir das gewünschte Textfeld einfach anklicken?

Genau das gelingt: Wenn der Benutzer auf das untere Textfeld klickt, soll das obere Textfeld für die Eigenschaft Vertikaler Anker den Wert Oben erhalten. Das untere hingegen soll den Wert Beide bekommen. Außerdem müssen wir noch dafür sorgen, dass das Bezeichnungsfeld des unteren Textfeldes dann wieder nach oben rutscht (Vertikaler Anker gleich Oben statt Unten).

Dass der Benutzer das untere Textfeld aktiviert hat, erfahren wir durch die Ereignisprozedur, die durch das Ereignis Bei Fokuserhalt dieses Steuerelements ausgelöst wird. Für dieses legen wir die folgenden drei Anweisungen an:

Private Sub txt2_GotFocus()
     Me!txt1.VerticalAnchor = acVerticalAnchorTop
     Me!txt2.VerticalAnchor = acVerticalAnchorBoth
     Me!lbl2.VerticalAnchor = acVerticalAnchorTop
End Sub

Die erste verankert das erste Textfeld oben, sodass dieses nicht mehr nach unten vergrößert wird. Stattdessen verankern wir das zweite Textfeld nicht mehr nur unten, sondern auch oben (Horizontaler Anker gleich Beide).

Das Bezeichnungsfeld des unteren Textfelds soll auch nach oben rutschen, daher Horizontaler Anker gleich Oben.

Das Ergebnis nach dem Aktivieren des zweiten Textfeldes sieht wie in Bild 6 aus.

Beim Klick auf das untere Textfeld wird dieses vergrößert.

Bild 6: Beim Klick auf das untere Textfeld wird dieses vergrößert.

Und wie machen wir dies wieder rückgängig, wenn der Benutzer auf das obere Textfeld klickt? Ganz einfach: Wir legen auch für die Ereigniseigenschaft Bei Fokuserhalt des oberen Textfeldes eine entsprechende Ereignisprozedur an. Diese enthält allerdings nur zwei Befehle:

Private Sub txt1_GotFocus()
     Me!txt1.VerticalAnchor = acVerticalAnchorBoth
     Me!txt2.VerticalAnchor = acVerticalAnchorBottom
End Sub

Hier stellen wir den vertikalen Anker für das obere Textfeld auf Beide und den für das untere Textfeld auf Unten ein. Warum aber müssen wir Vertikaler Anker für das untere Bezeichnungsfeld nicht wieder zurück auf Unten einstellen? Ganz einfach: Diese Eigenschaft des Bezeichnungsfeldes wird nicht nur automatisch geändert, wenn Vertikaler Anker für das Steuerelement über das Eigenschaftsfenster auf Beide eingestellt wird, sondern auch bei der entsprechenden Zuweisung per VBA.

Drei Textfelder abwechselnd maximieren

Gelingt uns dies auch mit drei Textfeldern wie in Bild 7? Natürlich, allerdings brauchen wir noch eine Ereignisprozedur mehr für das unterste Textfeld. Außerdem erweitert sich natürlich die Anzahl der Anweisungen für die bereits vorhandenen Textfelder.

Auch mit drei Textfeldern gelingt die wechselseitige Anpassung der Größe.

Bild 7: Auch mit drei Textfeldern gelingt die wechselseitige Anpassung der Größe.

Das Erste muss beim Fokuserhalt nur die Ausgangseinstellungen für die Eigenschaft Vertikaler Anker der drei Textfelder wiederherstellen – die der begleitenden Bezeichnungsfelder werden automatisch angepasst:

Private Sub txt1_GotFocus()
     Me!txt1.VerticalAnchor = acVerticalAnchorBoth
     Me!txt2.VerticalAnchor = acVerticalAnchorBottom
     Me!txt3.VerticalAnchor = acVerticalAnchorBottom
End Sub

Erhält das mittlere Textfeld den Fokus, stellen wir den vertikalen Anker des obersten Textfeldes auf Oben, den des mittleren auf Beide und den des unteren Textfeldes auf Unten ein. Außerdem müssen wir den vertikalen Anker des mittleren Bezeichnungsfeldes auf Oben einstellen:

Private Sub txt2_GotFocus()
     Me!txt1.VerticalAnchor = acVerticalAnchorTop
     Me!txt2.VerticalAnchor = acVerticalAnchorBoth
     Me!txt3.VerticalAnchor = acVerticalAnchorBottom
     Me!lbl2.VerticalAnchor = acVerticalAnchorTop
End Sub

Wenn der Benutzer auf das unterste Textfeld klickt, stellt die folgende Prozedur die Eigenschaft Vertikaler Anker für die beiden oberen Textfelder auf Oben und die für das untere Textfeld auf Beide ein. Außerdem erhält die Eigenschaft für die Bezeichnungsfelder der beiden oberen Textfelder jeweils den Wert Oben:

Private Sub txt3_GotFocus()
     Me!txt1.VerticalAnchor = acVerticalAnchorTop
     Me!txt2.VerticalAnchor = acVerticalAnchorTop
     Me!txt3.VerticalAnchor = acVerticalAnchorBoth
     Me!lbl2.VerticalAnchor = acVerticalAnchorTop
     Me!lbl3.VerticalAnchor = acVerticalAnchorTop
End Sub

Zusammenfassung und Ausblick

Dies ist eine interessante Technik für Anwendungen, die mehrere Textfelder übereinander (oder nebeneinander) anzeigen, die bei Bedarf durch Vergrößerung hervorgehoben werden sollen.

Ein Beispiel finden Sie im Formular frmOffeneMails der Lösung zum Beitrag Ticketverwaltung (www.access-im-unternehmen.de/1033).

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Download

Download

Die .zip-Datei enthält folgende Dateien:

TextfelderMitFlexiblerHoehe.accdb

Beispieldateien downloaden

© 2003-2015 André Minhorst Alle Rechte vorbehalten.