4D v14.3Unterformulare als Seite |
||
|
4D v14.3
Unterformulare als Seite
Unterformulare als Seite
Unterformulare als Seite können die Daten des aktuellen Unterdatensatzes oder, je nach Kontext (Variablen, Bilder, etc.), jede Art von dauerhaftem Wert anzeigen. Ein Hauptvorteil dieser Unterformulare ist, dass sie ergänzende Funktionalitäten haben und direkt mit dem Elternformular (Widgets) interagieren können. Unterformulare als Seite haben auch eigene Eigenschaften und Ereignisse; sie lassen sich komplett per Programmierung steuern. Hinweis: Sie können Komponenten generieren, die über Unterformulare zusätzliche Funktionalitäten bieten. Weitere Informationen dazu finden Sie im Abschnitt 4D Komponenten entwickeln und installieren. Um ein Unterformular als Seite zu aktivieren, deaktivieren Sie einfach in der Eigenschaftenliste unter der Gruppe Unterformular die Optioden Seitenmodus für en Ausgabeformular. Dann erscheinen die Eigenschaften für Unterformulare als Liste nicht mehr, wie z.B. Auswahlmodus, Doppelklick auf Zeile, u.ä: Das Unterformular als Seite verwendet das Eingabeformular, welches unter der Eigenschaft “Eingabeformular” angegeben ist. Es kann, anders als das Unterformular als Liste, von derselben Tabelle stammen wie das Elternformular. Sie können auch ein Projektformular verwenden. Bei der Ausführung hat das Unterformular als Seite die gleichen Anzeigemerkmale wie ein Eingabeformular. Die Funktionalitäten von Ausgabeformularen, hauptsächlich Markierer, sind nicht aktiv. Sie verwalten Unterformulare als Seite über spezifische Eigenschaften, welche die Einbindung und Interaktion mit dem Elternformular vereinfachen. Sie können einen Objekt Unterformular eine Variable zuordnen. Sie hat standardmäßig den Namen "Unterformular", wie das Objekt selbst. Sie hat einen Typ (siehe nächster Abschnitt) und lässt sich im Elternformular in Form einer Standardvariablen darstellen. Das Ändern dieser Variablen löst Formularereignisse aus, so dass Sie die Werte in Elternformular und Unterformular aufeinander abstimmen können:
Damit können Sie den Typ der Variablen setzen, die dem Objekt Unterformular zugewiesen ist. Standardmäßig ist der Typ alphanumerisch vorgegeben. Der Variablentyp bestimmt die Art der Werte, die über die zugewiesene Variable zwischen Elternformular und Unterformular ausgetauscht werden. Damit können Sie verschiedene Arten von Quellen auswählen:
Ein Objekt Unterformular kann eine Objektmethode haben, um seine Funktionsweise zu steuern, insbesondere wenn Ereignisse ausgelöst werden. Weitere Informationen zu Ereignissen bei Unterformularen als Seite finden Sie unter der 4D Funktion Form event. Beachten Sie, dass die Interaktion zwischen dem Inhalt des Objekts Unterformular und dem Elternformular über spezifische Mechanismen verwaltet werden muss (siehe Formularübergreifende Programmierung). Die dem Unterformular zugewiesene Variable ermöglicht, beide Kontexte (Formular und Unterformular) miteinander zu verbinden, um komplexen Oberflächen den Endschliff zu geben. Nehmen wir zum Beispiel ein Unterformular mit einer dynamischen Uhr, die in ein Elternformular eingefügt wird, das wiederum eine eingebbare Variable vom Typ Zeit enthält: Beide Objekte (Zeitvariable und Unterformular Container) haben denselben Variablennamen. In diesem Fall synchronisiert 4D beide Werte automatisch, wenn das Elternformular geöffnet wird. Ist der Wert der Variablen an verschiedenen Stellen gesetzt, verwendet 4D den zuletzt geladenen Wert. Beim Laden gilt folgende Reihenfolge:1- Objektmethoden des Unterformulars 2- Formularmethode des Unterformulars 3- Objektmethoden des Elternformulars 4- Formularmethode des Elternformulars Beim Ausführen des Elternformulars muss der Entwickler über passende Formularereignisse für die Synchronisierung der Variablen sorgen. Zwei Arten von Interaktionen können auftreten: Formular zu Unterformular und Unterformular zu Formular. Fall1: Der Wert der Variablen des Elternformulars wird geändert, diese Änderung muss sich im Unterformular widerspiegeln. In unserem Beispiel ändert sich die Zeit der Variablen ParisTime auf 12:15:00, entweder weil der Benutzer das eingegeben hat oder weil die Zeit dynamisch aktualisiert wird, z.B. über die 4D Funktion Current time. In diesem Fall müssen Sie das Formularereignis On bound variable change verwenden. Sie müssen es in den Eigenschaften des Unterformulars markieren. Es wird in der Formularmethode des Unterformulars erzeugt. Das Formularereignis On bound variable change wird erzeugt:
Wir empfehlen, wie im obigen Beispiel, die 4D Funktion OBJECT Get pointer zu verwenden, da sie statt der Variablen einen Zeiger auf den Unterformular Container übergibt. Denn in dasselbe Elternformular lassen sich mehrere Unterformulare einfügen. So enthält z.B. ein Fenster mit verschiedenen Zeitzonen mehrere Uhren. In diesem Fall lässt sich nur über einen Zeiger feststellen, welcher Unterformular Container am Ursprung des Ereignisses ist. Fall 2: Der Inhalt des Unterformulars wird geändert und diese Änderung muss sich im Elternformular widerspiegeln. Stellen Sie sich in unserem Beispiel vor, dass der Benutzer im Unterformular die Zeiger der Uhr manuell bewegen kann. In diesem Fall müssen Sie den Wert des Objekts der Variablen des Unterformular Containers im Elternformular zuweisen. Wie im vorigen Beispiel empfehlen wir, die 4D Funktion OBJECT Get pointer mit dem Selektor Object subform container zu verwenden, der einen Zeiger auf den Unterformular Container zurückgibt. Weisen Sie den Wert der Variablen zu, wird das Formularereignis On Data Change in der Objektmethode des Unterformular Containers im Elternformular generiert, so dass Sie jede Art von Aktion ausführen können. Dieses Ereignis muss in den Eigenschaften des Unterformular Containers ausgewählt sein. Hinweis: Bewegen Sie die Zeiger der Uhr manuell, wird das Formularereignis On Data Change ebenfalls in der Objektmethode der Variablen clockValue im Unterformular generiert. Die Kommunikation zwischen dem Elternformular und den Instanzen des Unterformulars erfordern u.U. mehr als den Austausch eines Werts über die zugewiesene Variable. Sie wollen die Variablen in den Unterformularen gemäß den Aktionen updaten, die im Elternformular ausgeführt werden und umgekehrt. Nehmen wir wieder das Beispiel Unterformular mit dynamischer Uhr. Wir wollen nun eine oder mehrere Alarmzeiten pro Uhr setzen. Dafür wurden in 4D folgende Funktionalitäten geschaffen:
Die 4D Funktion OBJECT Get pointer akzeptiert zusätzlich zum Selektor Object subform container einen Parameter, der angibt, in welchem Unterformular nach dem Objekt gesucht werden soll, dessen Name im zweiten Parameter angegeben ist. Diese Syntax lässt sich nur verwenden, wenn der Selektor Object named übergeben ist. Beispiel: $ptr:=OBJECT Get pointer(Object named;"MyButton";"MySubForm") ... findet einen Zeiger auf die Variable "MyButton", die im Unterformular "MySubForm" sliegt. Über diese Syntax lässt sich vom Elternformular aus auf jedes Objekt zugreifen, das im Unterformular gefunden wird. Über den 4D Befehl CALL SUBFORM CONTAINER kann eine Unterformular Instanz ein Ereignis an das Objekt Unterformular-Container senden, welches es dann im Kontext des Elternformulars bearbeiten kann. Das Ereignis wird in der Objektmethode des Containers empfangen. Es kann am Ursprung jedes Ereignisses sein, das vom Unterformular gefunden wird (Klick, Drag-and-Drop, etc.). Der Code des Ereignisses ist nicht begrenzt, er kann z.B. 20000 oder -100). Sie können Code von vorhandenen Ereignissen, z.B. 3 für On Validate, oder einen eigenen Code verwenden. Im ersten Fall können Sie nur Ereignisse verwenden, die Sie in der Eigenschaftenliste für Unterformular Container markiert haben. Im zweiten Fall darf der Code keinem vorhandenen Formularereignis entsprechen. Wir empfehlen, einen negativen Wert zu verwenden, um sicherzustellen, dass 4D diesen Code nicht in zukünftigen Versionen verwendet. Die ausführliche Beschreibung dieses Befehls finden Sie unter CALL SUBFORM CONTAINER. Über den 4D Befehl EXECUTE METHOD IN SUBFORM ann ein Formular oder eins seiner Objekte die Ausführung einer Methode im Kontext der Unterformular Instanz anfordern, was Zugriff auf Variablen, Objekte, etc. des Unterformulars gibt. Diese Methode kann auch Parameter empfangen. Die Funktionsweise wird im nachfolgenden Schema dargestellt: Die ausführliche Beschreibung dieses Befehls finden Sie unter EXECUTE METHOD IN SUBFORM. Der 4D Befehl GOTO OBJECT sucht nach dem Zielobjekt im Elternformular, auch wenn es über ein Unterformular ausgeführt wird. |
EIGENSCHAFTEN
Produkt: 4D SIEHE AUCH ARTIKELVERWENDUNG
4D Designmodus ( 4D v14 R2) |