4D v14.3

Arrays und Formularobjekte

Home

 
4D v14.3
Arrays und Formularobjekte

Arrays und Formularobjekte  


 

 

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 (ab 4D v13 überholt)
  • 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 (außer 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.

Hinweise:

  • Das ausgewählte Element des Array wird intern in einer Variablen vom Typ Lange Ganzzahl gespeichert. Deshalb lässt es sich nicht mit Arrays verwenden, die mehr als 32.767 Elemente enthalten. Darüberhinaus passt solch eine hohe Anzahl an Elementen auch nicht zur Anzeige als Formularobjekt.
  • 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 Contextual click.

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.

Erstellen Sie eine Dropdown-Liste mit Namen arSalaries. Er sollte mit dem Namen des Array identisch sein.

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.

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.

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)))

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.

Mit den Befehlen APPEND TO ARRAY, INSERT IN ARRAY und DELETE FROM ARRAY löschen oder fügen Sie Elemente hinzu.

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.

In ähnlicher Weise können Sie per Programmierung das ausgewählte Element ändern, indem Sie dem Array einen Wert zuweisen.

  ` 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

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 Count tasks.

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.

  ` 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

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Arrays

 
SIEHE AUCH 

Einführung in Arrays

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v11 SQL Release 6)
4D Programmiersprache ( 4D v12.4)
4D Programmiersprache ( 4D v14 R2)
4D Programmiersprache ( 4D v14 R3)
4D Programmiersprache ( 4D v13.5)
4D Programmiersprache ( 4D v14.3)
4D Programmiersprache ( 4D v14 R4)