Version 2004 (Geändert)
Arrays sind Objekte der Programmiersprache Sie können Arrays erstellen und benutzen, die für den Benutzer unsichtbar sind. Arrays sind ebenso Objekte der Benutzeroberfläche. Arrays unterstützen folgende Arten von Formularobjekten:
PopUp-Menü
Dropdown-Listen
Combo Boxen
Rollbare Bereiche
Registerkarten
Listboxen
Sie können diese Objekte entweder im Designmodus im Formulareditor über die Eigenschaftenliste mit der Schaltfläche Standardwerte einrichten oder über die Array-Befehle programmieren (ausser für Listboxen).
Bei diesen Objekten können Sie das Array nach einem ausgewählten Element abfragen und so herausfinden, welches Element innerhalb des Objekts ausgewählt bzw. angeklickt wurde.
Setzen Sie ein Array zur Unterstützung eines Formularobjekts ein, ist es sowohl ein Objekt der Programmiersprache als auch der Benutzeroberfläche. Sie erstellen z.B. einen rollbaren Bereich in einem Formular:
Der Name der zugewiesenen Variablen, hier atNames ist der Name des Array, das Sie zum Erstellen und Verwalten des rollbaren Bereichs verwenden.
Hinweis: Sie können keine zweidimensionalen Arrays oder Zeiger-Arrays anzeigen.
Die Verwaltung von Objekten des Typs Listbox, welches mehrere Arrays enthalten kann, ist sehr vielseitig. Ausführliche Informationen dazu finden Sie im Abschnitt Objekttyp Listbox verwalten.
Eine Dropdown-Liste erstellen
Folgendes Beispiel zeigt, wie Sie ein Array füllen und in einer Dropdown-Liste anzeigen. Mit dem Befehl ARRAY REAL erstellen Sie ein Array mit Namen arSalaries. Es enthält alle Standardlöhne, die in einer Firma ausgezahlt werden. Wählt der Benutzer ein Element aus der Dropdown-Liste, wird dem Datenfeld [Employees]Salary der in der Design- oder Anwendungsumgebung gewählte Wert zugewiesen.
Dropdown-Liste arSalaries in Formular anlegen
Erstellen Sie eine Dropdown-Liste mit Namen arSalaries. Er sollte mit dem Namen des Array identisch sein.
Array initialisieren
Initialisieren Sie das Array arSalaries mit dem Ereignis On Load für das Objekt. Dazu müssen Sie dieses Ereignis in der Eigenschaftenliste aktivieren:
Klicken Sie auf die Schaltfläche Objektmethoden und erstellen Sie folgende Methode:
Die Programmierzeilen:
ARRAY REAL(arSalaries;10) For($vlElem;1;10) arSalaries{$vlElem}:=2000+($vlElem*500) End for
erstellen ein Array mit den Zahlen 2500, 3000... 7000.
Die Programmierzeilen:
arSalaries:=Find in array(arSalaries;[Employees]Salary) If (arSalaries=-1) arSalaries:=0 End if
erzeugen einen neuen Datensatz oder ändern einen bestehenden Datensatz.
Erstellen Sie einen neuen Datensatz, ist das Datenfeld [Employees]Salary zu Beginn gleich Null. In diesem Fall findet Find in array keinen Wert im Array und gibt -1 zurück. Die Abfrage If (arSalaries=-1) setzt arSalaries auf Null und zeigt so an, dass in der Dropdown-Liste kein Element ausgewählt ist.
Ändern Sie einem bestehenden Datensatz, findet Find in array den Wert im Array und setzt das ausgewählte Element der Dropdown-Liste auf den aktuellen Wert des Datenfeldes. Befindet sich der Wert für einen bestimmten "Employe" nicht in der Liste, hebt die Abfrage If (arSalaries=-1) die Auswahl in der Liste auf.
Hinweis: Weitere Informationen dazu finden Sie im nächsten Abschnitt.
Ausgewählten Wert in Datenfeld [Employees]Salary übertragen
Um den ausgewählten Wert aus der Dropdown-Liste arSalaries zu übertragen, müssen Sie nur das Ereignis On Clicked auf das Objekt anwenden. Die Nummer des ausgewählten Elements ist der Wert des Array arSalaries selbst. Der Ausdruck arSalaries{arSalaries} gibt so den in der Drop-Down-Liste gewählten Wert zurück.
Vervollständigen Sie die Methode für das Objekt arSalaries wie folgt:
Case of : (Form event=On Load) ARRAY REAL(arSalaries;10) For($vlElem;1;10) arSalaries{$vlElem}:=2000+($vlElem*500) End for arSalaries:=Find in array(arSalaries;[Employees]Salary) If (arSalaries=-1) arSalaries:=0 End if : (Form event=On Clicked) [Employees]Salary:=arSalaries{arSalaries} End case
Die Dropdown-Liste in der Design- oder Anwendungsumgebung sieht folgendermaßen aus:
Der nächste Abschnitt beschreibt die allgemeingültigen Operationen für Arrays, die Sie als Formularobjekte verwenden.
Tabellengröße feststellen
Mit der Funktion Size of array erhalten Sie die aktuelle Größe des Array. Gehen wir vom vorigen Beispiel aus. Folgende Programmierzeile würde 5 anzeigen:
ALERT ("The size of the array atNames is: "+String(Size of array(atNames)))
Elemente des Array neu ordnen
Mit dem Befehl SORT ARRAY ordnen Sie die Elemente eines Array neu, mit dem Befehl MULTI SORT ARRAY mehrere Arrays. Wir wählen wieder das vorige Beispiel und gehen davon aus, dass das Array als rollbarer Bereich angezeigt wird:
a. Zu Beginn sieht der Bereich wie die Liste auf der linken Seite aus.
b. Nach Ausführen der Programmierzeile:
SORT ARRAY(atNames;>)
sieht der Bereich wie die Liste in der Mitte aus.
c. Nach Ausführen der Programmierzeile:
SORT ARRAY(atNames;<)
sieht der Bereich wie die Liste auf der rechten Seite aus.
Elemente hinzufügen oder löschen
Mit den Befehlen APPEND TO ARRAY, INSERT ELEMENT und DELETE ELEMENT löschen oder fügen Sie Elemente hinzu.
Klicks in Array: Das ausgewählte Element testen
Wir nehmen das vorige Beispiel und gehen davon aus, dass das Array als rollbarer Bereich angezeigt wird. Klicks in diesem Bereich fragen Sie wie folgt ab:
` Objektmethode rollbarer Bereich atNames Case of : (Form event=On Load) ` Initialisiere Array (wie oben angezeigt) ARRAY TEXT (atNames;5) ` ... : (Form event=On Unload) ` Wir benötigen das Array nicht mehr CLEAR VARIABLE(atNames) : (Form event=On Clicked) If (atNames#0) vtInfo:="Sie haben geklickt auf: "+atNames{atNames} End if : (Form event=On Double Clicked) If (atNames#0) ALERT ("Sie haben doppelgeklickt auf: "+atNames{atNames} End if End case
Hinweis: Diese Ereignisse müssen in der Eigenschaftenliste für das Objekt aktiviert sein.
Mit der Syntax atNames{$vlElem} können Sie mit einem bestimmten Element des Array arbeiten, während die Syntax atNames die Nummer des ausgewählten Elements im Array zurückgibt. Die Syntax atNames{atNames} bedeutet also "Wert des ausgewählten Elements im Array atNames". Ist kein Element ausgewählt, hat atNames den Wert 0 (Null), die Abfrage If (atNames#0) findet heraus, ob derzeit ein Element ausgewählt ist oder nicht.
Ausgewähltes Element setzen
In ähnlicher Weise können Sie per Programmierung das ausgewählte Element ändern, indem Sie dem Array einen Wert zuweisen.
Beispiele
` Wählt das erste Element (wenn das Array nicht leer ist) atNames:=1 ` Wählt das letzte Element (wenn das Array nicht leer ist) atNames:=Size of array(atNames) ` Deaktiviert das ausgewählte Element (sofern vorhanden), es ist dann kein Element ausgewählt atNames:=0 If ((0<atNames)&(atNames<Size of array(atNames)) ` Wählt, falls möglich, das nächste Element nach dem ausgewählten Element atNames:=atNames+1 End if If (1<atNames) ` Wählt, falls möglich, das nächste Element vor dem ausgewählten Element atNames:=atNames-1 End if
Wert in Array suchen
Die Funktion Find in array sucht nach einem bestimmten Wert im Array. Im oben erwähnten Beispiel wählt folgender Code das Element mit dem Wert "Richard," wenn dies im Dialogfenster Request eingetragen ist:
$vsName:=Request("Gib den Vornamen ein:") If (OK=1) $vlElem:=Find in array (atNames;$vsName) If ($vlElem>0) atNames:=$vlElem Else ALERT ("Es gibt keinen "+$vsName+" in dieser Liste mit Vornamen.") End if End if
PopUp-Menüs, Dropdown-Listen, rollbare Bereiche und Registerkarten lassen sich normalerweise auf dieselbe Art abfragen. Natürlich ist kein weiterer Code erforderlich, um Objekte jedes Mal auf dem Bildschirm neu zu zeichnen, wenn Sie den Wert eines Elements ändern, hinzufügen oder löschen.
Hinweis: Für Registerkarten mit Icons und aktiven bzw. inaktiven Registern müssen Sie als unterstützendes Objekt eine hierarchische Liste verwenden. Weitere Informationen dazu finden Sie im Beispiel zur Funktion New list.
Combo Boxen
PopUp-Menüs, Dropdown-Listen, rollbare Bereiche und Registerkarten verwalten Sie mit den oben beschriebenen Algorithmen. Combo Boxen dagegen müssen Sie anders verwalten.
Eine Combo Box ist ein eingebbarer Text, dem eine Liste mit Werten (die Elemente aus dem Array) angehängt ist. Der Benutzer kann einen Wert aus der Liste auswählen und dann den Text editieren. Von daher läßt sich der Begriff ausgewähltes Element nicht auf Combo Boxen anwenden. In Combo Boxen gibt es nie ein ausgewähltes Element. Immer wenn der Benutzer einen Wert aus der angehängten Liste auswählt, wird dieser in das Element Null des Array gelegt. Wenn der Benutzer dann den Text editiert, wird der vom Benutzer geänderte Wert ebenfalls in das Element Null gelegt.
Beispiel
` Objektmethode Combo Box asColors Case of : (Form event=On Load) ARRAY STRING(31;asColors;3) asColors{1}:="Blue" asColors{2}:="White" asColors{3}:="Red" : (Form event=On Clicked) If (asColors{0}#"") ` Das Objekt ändert automatisch seinen Wert ` Das Ereignis On Clicked ist in einer Combo Box ` nur bei zusätzlichen Aktionen erforderlich End if : (Form event=On Data Change) ` Find in array ignoriert Element 0, gibt also -1 oder >0 zurück If (Find in array(asColors;asColors{0})<0) ` Eingegebener Wert gehört nicht zu den diesem Objekt angehängten Werten ` Füge Wert für das nächste Mal in der Liste hinzu. APPEND TO ARRAY (asColors;asColors{0}) Else ` Eingegebener Wert gehört zu den diesem Objekt angehängten Werten End if End case
Referenz
Einführung in Arrays, Gruppierte rollbare Bereiche.