Einführung in Listboxen

4D - Documentation   Français   English   German   English   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next

Version 11.3 (Geändert)


Die Befehle und Funktionen dieses Kapitels dienen zum Verwalten von Formularobjekten vom Typ Listbox.

Listboxen sind vergleichbar mit dem Objekt Gruppierte rollbare Bereiche. Eine Listbox bietet alle Funktionen von gruppierten rollbaren Bereichen, insbesondere die Möglichkeit, Daten in Form von Spalten und auswählenbaren Zeilen darzustellen. In Listboxen können Sie darüberhinaus Werte eingeben, Spalten sortieren, wechselnde Farben definieren, etc.

Sie können eine Listbox komplett im Formulareditor von 4D einrichten und sie auch über Programmierung verwalten. Weitere Informationen zum Erstellen und Verwenden im Formulareditor finden Sie im Handbuch 4D Designmodus.

Die Programmierung von Listboxen erfolgt auf dieselbe Art und Weise wie für andere 4D Formularobjekte vom Typ Liste. Hierfür müssen jedoch spezifische Regeln beachtet werden.

Hinweis: Listboxen werden nur für Bildschirmoberflächen angelegt. Sie können nicht gedruckt werden.

Datenquellen und Werte verwalten


Eine Listbox kann eine oder mehrere Spalten enthalten, die sich einem 4D Array oder einer Datensatzauswahl zuordnen lassen. Bei einer Auswahl vom Typ Listbox werden die Spalten Feldern oder Ausdrücken zugewiesen.

Es ist nicht möglich, beide Arten von Datenquellen ( Arrays und Auswahl) in der gleichen Listbox zu kombinieren. Die Datenquelle wird gesetzt, wenn die Listbox im Formulareditor über die Eigenschaftenliste erstellt wird. Sie lässt sich dann nicht mehr per Programmierung verändern.

Listboxen vom Typ Array

Bei diesem Typ muss jede Spalte einem eindimensionalen 4D Array zugewiesen werden; alle Array-Typen sind möglich, mit Ausnahme von Array mit Zeigern. Das Anzeigeformat für jede Spalte lässt sich im Formulareditor oder über den Befehl SET FORMAT definieren.

Zum Verwalten der Werte in den Spalten (Eingabe und Anzeige) per Programmierung dienen Befehle für Listboxen, z.B. INSERT LISTBOX ROW oder DELETE LISTBOX ROW, sowie Befehle für Arrays. Sie können z.B. den Inhalt einer Spalte mit folgender Anweisung initialisieren:

   ARRAY TEXT(ColumnName; size)

Sie können auch eine Liste verwenden:

   LIST TO ARRAY("ListName"; ColumnName)

Warnung: Enthält die Listbox mehrere Spalten in verschiedenen Größen, erscheint nur die Anzahl der Einträge im kleinsten Array (Spalte). Stellen Sie sicher, dass alle Arrays jeweils dieselbe Anzahl Elemente haben. Auch wenn eine Spalte der Listbox leer ist, zeigt die Listbox nichts an. Das passiert, wenn das Array nicht korrekt deklariert wurde oder über die Programmiersprache in der Größe angepasst wurde.

Listboxen vom Typ Auswahl

Bei diesem Typlässt sich jede Spalte einem Feld oder Ausdruck zuweisen. Der Inhalt jeder Spalte wird dann gemäß der Datensatzauswahl gewertet, das ist die aktuelle Auswahl einer Tabelle oder eine temporäre Auswahl.

Ist die aktuelle Auswahl die Datenquelle, werden Änderungen in der Datenbank automatisch in der Listbox ausgeführt und umgekehrt. Die aktuelle Auswahl ist also auf beiden Seiten immer gleich. Beachten Sie, dass Sie bei einer Auswahl nicht die Befehle INSERT LISTBOX ROW und DELETE LISTBOX ROW verwenden können.

Sie können die Spalte einer Listbox mit einem Ausdruck verbinden, dieser kann auf einem oder mehreren Datenfeldern basieren, z.B. [Angestellte]Nachname+" "+[Angestellte]VorName) oder einfach eine Formel sein, z.B. String(Milliseconds)). Es kann auch eine Projektmethode, Variable oder ein Array-Element sein.

Über den Befehl SET LISTBOX TABLE SOURCE können Sie die der Listbox zugeordnete Tabelle per Programmierung verändern.

Elemente der Listbox


Das Objekt List box besteht aus drei Elementen:

Das Objekt selbst,

Spalten,

Spaltentitel

Diese Elemente lassen sich im Formulareditor einzeln auswählen, jedes davon hat einen eigenen Objekt- und Variablennamen und lässt sich separat bearbeiten.

Spalten haben im Formular standardmäßig den Namen Spalte1, 2 ... X, Spaltentitel Header1, 2 ... X, sie sind unabhängig vom Objekt Listbox selbst.

Jede Art Eintrag enthält eigene sowie mit anderen Einträgen geteilte Merkmale. Schriften lassen sich z.B. für die ganze Listbox zuweisen oder für getrennt Spalten und Kopfteil. Eigenschaften für die Eingabe lassen sich hingegen nur für Spalten definieren.

Diese Regeln gelten für die Befehle im Kapitel "Objekteigenschaften", die für Listboxen geeignet sind. Je nach Funktionalität gelten sie für die gesamte Listbox, für Spalten bzw. Spaltentitel. Das entsprechende Element übergeben Sie mit seinem Namen oder über die dazuhörige Variable.

Nachfolgende Tabelle zeigt die bisherigen und neuen Routinen aus dem Kapitel „Objekte" an und für welche Elemente sie gelten:

Befehl ObjekteigenschaftenObjektSpaltenSpaltentitel
MOVE OBJECT X
GET OBJECT RECT X
SET FILTER X
SET FORMAT X
SET ENTERABLE X
SET CHOICE LIST X
BUTTON TEXT X
SET COLOR XX
SET RGB COLORS XX
FONT XXX
FONT SIZE XXX
FONT STYLE XXX
SET ALIGNMENT XXX
Get alignment XXX
SET VISIBLE XXX
BEST OBJECT SIZE XXX

Hinweise:

Alle Routinen im Kapitel "Listbox" gelten nur für Objekte der Listbox, mit Ausnahme des Befehls SET LISTBOX COLUMN WIDTH (gilt für Objekte, Spalten und Kopfteile) und der Funktion Get listbox column width (gilt nur für Spalten und Kopfteile).

Mit Arrays vom Typ Listbox ist es möglich, Stil, Farbe für Schrift oder Hintergrund und Sichtbarkeit für jede Zeile getrennt anzugeben. Dies wird über Arrays verwaltet, die der Listbox in der Eigenschaftenliste zugewiesen wird. Über den Befehl GET LISTBOX ARRAYS können Sie die Namen dieser Arrays per Programmierung herausfinden.

Listbox und Programmiersprache


Objektmethoden

Sie können eine Objektmethode einem Objekt bzw. einer Spalte der Listbox hinzufügen. Objektmethoden werden in folgender Reihenfolge aufgerufen:

1. Objektmethode jeder Spalte

2. Objektmethode der Listbox

Die Objektmethode der Spalte erhält Ereignisse, die im Kopfteil eintreten

SET VISIBLE und Spaltentitel

Verwenden Sie den Befehl SET VISIBLE mit einem Spaltentitel, gilt er für alle Titel der Listbox , unabhängig vom Titel, der im Befehl übergeben wurde. So blendet die Anweisung SET VISIBLE(*;"header3";False) alle Spaltentitel im Objekt Listbox aus, zu denen „header3" gehört und nicht allein diesen Titel.

Objekt mit Fokus und Self

Die Funktionen Focus object (Kapitel "Benutzeroberfläche" theme) und Self (Kapitel "Programmiersprache") lassen sich in der Objektmethode einer Listbox bzw. einer Spalte der Listbox verwenden. Sie geben je nach Formularereignis einen Zeiger auf die Listbox, die Spalte der Listbox (1) oder die Variable des Kopfteils zurück. Nachfolgende Tabelle zeigt die Funktionsweise im Einzelnen:

EreignisFocus objectSelf
On ClickedListboxSpalte
On Double ClickedListboxSpalte
On Before KeystrokeSpalteSpalte
On After KeystrokeSpalteSpalte
On After EditSpalteSpalte
On Getting FocusSpalte oder Listbox (*)Spalte oder Listbox (*)
On Losing FocusSpalte oder Listbox (*)Spalte oder Listbox (*)
On DropListbox QuelleListbox (*)
On Drag OverListbox QuelleListbox (*)
On Begin Drag OverListboxListbox (*)
On Mouse EnterListbox (**)Listbox (**)
On Mouse MoveListbox (**)Listbox (**)
On Mouse LeaveListbox (**)Listbox (**)
On Data ChangeSpalteSpalte
On Selection ChangeListbox (**)Listbox (**)
On Before Data EntrySpalteSpalte
On Column MovedListboxSpalte
On Row MovedListboxListbox
On Column ResizeListboxSpalte
On Header ClickListboxKopfteil
On After SortListboxKopfteil

(*) Wird der Fokus innerhalb einer Listbox geändert, wird ein Zeiger auf die Spalte zurückgegeben. Wird der Fokus auf der übergeordneten Formularebene geändert, wird ein Zeiger auf die Listbox zurückgegeben. Bei einer Objektmethode einer Spalte wird ein Zeiger auf die Spalte zurückgegeben.

(**) Wird nicht ausgeführt im Kontext einer Objektmethode einer Spalte.

(1) Wird ein Zeiger auf eine Spalte zurückgegeben, richtet sich das angezeigte Objekt nach der Art der Listbox. Bei einer Listbox vom Typ Array gibt die Funktion Focus Object einen Zeiger auf die Spalte in der Listbox mit Fokus zurück (z.B. gegen ein Array). Über den Zeiger können Sie die Eintragsnummer des geänderten Array sehen. Nehmen wir an, der Benutzer hat die 5. Zeile in Spalte Sp2 geändert:

   $Column:= Focus Object
      ` $Column enthält einen Zeiger auf Sp2
   $Row:= $Column->   `$Row equals 5

Bei einer Listbox vom Typ Auswahl, gibt die Funktion Focus Object folgendes zurück:

Für eine Spalte, die einem Datenfeld zugeordnet ist, einen Zeiger auf dieses Datenfeld

Für eine Spalte, die einer Variablen zugeordnet ist, einen Zeiger auf die Variable

Für eine Spalte, die einem Ausdruck zugeordnet ist, den Zeiger Nil.

SCROLL LINES

Der Befehl SCROLL LINES (Kapitel "Benutzeroberfläche") lässt sich mit einer Listbox verwenden. Er scrollt in den Zeilen, so dass die erste gewählte oder angegebene Zeile angezeigt wird.

EDIT ITEM

Mit dem Befehl EDIT ITEM im Kapitel "Eingabekontrolle" können Sie eine Zelle des Objekts Listbox in den Bearbeitungsmodus setzen.

Displayed line number

Die Funktion Displayed line number im Kapitel "Auswahl" funktioniert für Listboxen im Kontext des Formularereignisses On Display Detail.

Formularereignisse

Es gibt spezifische Formularereignisse zum Verwalten von Listboxen, insbesondere für Drag&Drop und Sortieroperationen. Weitere Informationen dazu finden Sie in der Beschreibung zur Funktion Form event.

Drag and Drop

Zur Verwaltung von Drag and Drop von Daten in Listboxen dienen die Routinen Drop position und DRAG AND DROP PROPERTIES. Sie wurden speziell an Listboxen angepasst.

Achtung! Verwechseln Sie nicht Drag&Drop mit Bewegen von Zeilen und Spalten. Dies wird von den Befehlen MOVED LISTBOX ROW NUMBER und MOVED LISTBOX COLUMN NUMBER unterstützt.

Sortierung verwalten


Bei Anklicken des Spaltentitels führt die Listbox automatisch eine Standardsortierung der Spalten durch. Das ist die alphanumerische Sortierung der Spaltenwerte in aufsteigender bzw. absteigender Reihenfolge durch mehrfache Klicks. Alle Spalten werden automatisch miteinander synchronisiert. Wollen Sie diese Standardsortierung unterbinden, deaktivieren Sie die Eigenschaft "Sortierbar" für die Listbox.

Der Entwickler kann über den Befehl SORT LISTBOX COLUMNS bzw. durch Kombinieren der Formularereignisse On Header Click und On After Sort und 4D Befehlen zur Array-Verwaltung eigene Sortierungen einrichten. Weitere Informationen dazu finden Sie unter der Funktion Form event.

Hinweis: Die Spalteneigenschaft „Sortierbar" gilt nur für Standardsortierungen des Benutzers. Der Befehl SORT LISTBOX COLUMNS berücksichtigt diese Eigenschaft nicht.

Über den Wert der Variablen für den Spaltentitel können Sie zusätzliche Information verwalten: die aktuelle Sortierung der Spalte im Lesemodus und die Anzeige des Sortierpfeils.

Hat die Variable den Wert 0 (Null), wird die Spalte nicht sortiert, es erscheint kein Sortierpfeil;

Hat die Variable den Wert 1, wird die Spalte in aufsteigender Reihenfolge sortiert, der Sortierpfeil erscheint;

Hat die Variable den Wert 2, wird die Spalte in absteigender Reihenfolge sortiert, der Sortierpfeil erscheint.

Sie können den Wert der Variablen setzen, damit der Sortierpfeil angezeigt wird, z.B. Header2:=2. In diesem Fall wird die Spaltensortierung selbst nicht geändert; es ist Aufgabe des Entwicklers, das zu verwalten.

Auswahlen verwalten


Listboxen werden unterschiedlich verwaltet, je nachdem, ob die Listbox auf einem Array oder auf einer Auswahl basiert.

Listbox vom Typ Auswahl: Auswahlen werden von einer Menge mit Namen "Highlight Set" verwaltet. Diese Menge wird in den Eigenschaften der Listbox definiert und von 4D automatisch verwaltet: Wählt der Benutzer eine oder mehrere Zeilen in der Listbox, wird die Menge sofort aktualisiert. Sie können auch Befehle aus dem Kapitel "Mengen" verwenden, um die Auswahl der Listbox per Programmierung zu verändern.

Listbox vom Typ Array: Mit dem Befehl SELECT LISTBOX ROW können Sie per Programmierung eine oder mehrere Zeilen in der Listbox wählen.

Diese Variable ist ein Array vom Typ Boolean, die 4D automatisch erstellt und pflegt. Die Größe des Array richtet sich nach der Größe der Listbox: Sie enthält dieselbe Anzahl Elemente wie das kleinste mit Spalten verknüpfte Array.

Jedes Element des Array gibt Wahr zurück, wenn die entsprechende Zeile gewählt ist, sonst Falsch. 4D aktualisiert den Inhalt dieses Array gemäß den Benutzeraktionen. Umgekehrt können Sie den Wert von Elementen im Array verändern, um die Auswahl in der Listbox zu ändern.

Dagegen können Sie in diesem Array weder Zeilen einfügen, überschreiben noch löschen.

Hinweis: Über die Funktion Count in array finden Sie die Anzahl der gewählten Zeilen.

Mit der folgenden Methode können Sie die Auswahl der ersten Zeile in der Listbox vom Typ Array invertieren:

   ARRAY BOOLEAN (tBListBox;10)
      ` tBListBox ist der Name der Listbox Variablen im Formulara
   If (tBListBox{1} = True)
      tBListBox{1}:= False
   Else
      tBListBox{1}:= True
   End if

4D - Documentation   Français   English   German   English   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next