Flying Controls

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Fliegende Steuerelemente üblicherweise positionieren Sie Textboxen, Labels und Kombinationsfelder fest im Entwurf eines Formulars und ändern an der ergonomischen Gestalt zur Laufzeit nichts mehr. Doch manchmal gibt es gute Gründe für ein dynamisches Layout, bei dem Steuerelemente ihren angestammten Platz verlassen. Einige Anregungen dazu liefert dieser Beitrag.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1607_FlyingCtls.accdb.

Steuerelemente verschieben

Für die Position jedes Steuerelements sind dessen Eigenschaften Links und Oben im Formular- oder Berichtsentwurf verantwortlich, die Sie entweder durch Ziehen der Elemente mit der Maus ändern, oder durch einen direkten Eintrag im Eigenschaftenblatt. Gleiches gilt für die Breite und Höhe eines Controls.

Unter VBA greifen Sie auf diese Eigenschaften über die Properties Left und Top zu, sowie über Width und Height. Diese Methoden sind nicht schreibgeschützt, so dass Sie über entsprechende Wertzuweisungen die Positionen zur Laufzeit ändern können. Ein Textfeld txtName bringen Sie etwa so in eine andere Position und auf neue Abmessungen:

txtName.Left = 300
txtName.Top = 120
txtName.Width = 2100
txtName.Height = 270

Das Ganze können Sie auch über einen With-Block auf das Control umsetzen und setzen besser noch den Container Me des Steuerelements voran:

With Me!txtName
   .Left = 300
   .Top = 120
   .Width = 2100
   .Height = 270
End With

Die Einheit dieser Werte ist unter Access immer Twips. 15 Twips entsprechen in der Regel 15 Pixeln und ein Zentimeter entspricht etwa 567 Twips. Die Positionsangaben beziehen sich grundsätzlich auf die linke obere Ecke des Steuerelements als seinen Ursprung und sind, entgegen der Aussage in der Access-Hilfe, relativ zum jeweiligen Container. Das kann der Detailbereich sein, aber auch der Kopf- oder Fußbereich. Bei Berichten kommen noch weitere Containerflächen hinzu.

Eine Alternative zum direkten Zuweisen der Werte an Left und Top stellt die Move-Methode dar, die allen Steuerelementen zueigen ist. Mit ihr können Sie die vier Eigenschaften auf einen Schlag einstellen:

Me!txtName.Move 300, 120, 2100, 270

Alle vier Angaben sind optional. Sie können also mit dieser Methode etwa nur Position oder nur die Abmessungen ändern, indem Sie die anderen Parameter weglassen:

Me!txtName.Move 300,120
Me!txtName.Move , , 2100, 270

Schließlich gibt es mit der DoCmd-Anweisung MoveSize noch eine weitere Methode, die in ihren Parametern der Move-Methode der Controls entspricht. Sie wirkt allerdings nicht nur auf Steuerelemente, sondern genauso auf Formularfenster. Das macht zur Bedingung, dass das zu positionierende Element zum Zeitpunkt ihres Aufrufs den Fokus besitzt:

Me!txtName.SetFocus
DoCmd.MoveSize 300, 120, 2100, 270

Auch hier sind alle Parameter optional. Die Methode entkoppelt die Anweisung vom Steuerelement und eignet sich daher nur für Fälle, in denen das Control-Objekt ungewiss ist.

Fliegende Steuerelemente

Das weitgehend sinnfreie Formular frmFlying der Beispieldatenbank demonstriert die Verschiebeeffekte zur Laufzeit (Bild 1). In einer VBA-Schleife werden über den Timer des auf Adressdatensätzen basierenden Formulars sämtliche Steuerelemente fortlaufend verschoben. Damit sie nicht über den Rand hinaus geraten, was Access ohnehin mit einer Fehlermeldung quittieren würde, reflektieren sie quasi billardmäßig von den Seiten. Den Code, der beim Starten des Formulars zunächst ausgeführt wird, finden Sie in Listing 1. Er ist auf den ersten Blick nicht selbsterklärend.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar