4D v16.3

Hierarchische Listboxen verwalten

Home

 
4D v16.3
Hierarchische Listboxen verwalten

Hierarchische Listboxen verwalten  


 

 

In 4D können Sie hierarchische Listboxen definieren und verwenden. Das ist eine Listbox, in welcher der Inhalt der ersten Spalte in hierarchischer Form erscheint. Diese Art von Darstellung ermöglicht z.B. den Inhalt eines Verzeichnisses anzuzeigen, wie den Finder von Mac OS. Sie ist auch angepasst an die Präsentation von Information, die wiederholte bzw. hierarchisch gegliederte Werte enthält, z.B. Land/Bundesland/Stadt o.ä.

Nur Listboxen vom Typ Array können hierarchisch sein.

Hierarchische Listboxen sind eine besondere Darstellungsart von Daten. Sie verändern jedoch nicht die Struktur dieser Daten (die Arrays). Hierarchische Listboxen werden exakt wie normale Listboxen verwaltet. Weitere Informationen dazu finden Sie im Abschnitt Einführung in Listboxen.

Um eine hierarchische Listbox zu definieren, gibt es folgende Möglichkeiten:

Wird ein Formular mit hierarchischer Listbox zum ersten Mal geöffnet, werden standardmäßig alle Zeilen aufgeklappt.
Ein Umbruch und ein hierarchischer Knotenpunkt werden automatisch in der Listbox hinzugefügt, wenn Werte in den Arrays wiederholt werden. Nehmen wir z.B. eine Listbox mit vier Arrays mit den Angaben Countries, Region, Cities und Population:

Wird diese Listbox in hierarchischer Form angezeigt (die drei ersten Arrays sind in der Hierarchie enthalten), erhalten Sie folgendes:

Die Arrays werden vor dem Aufbau der Hierarchie nicht sortiert. Enthält ein Array z.B. die Daten AAABBAACC, lautet die Hierarchie:

> A
> B
> A
> C

Um einen hierarchischen Knotenpunkt auf- oder zuzuklappen, klicken Sie darauf. Klicken Sie mit der Tastenkombination Alt+Klick (Windows) oder Wahltaste+Klick (Mac OS) auf den Knoten, werden alle Unterelemente auf- oder zugeklappt. Diese Operationen lassen sich auch per Programmierung über die Befehle LISTBOX EXPAND und LISTBOX COLLAPSE ausführen.

Eine hierarchische Listbox zeigt je nach Status eine variable Anzahl Zeilen auf dem Bildschirm, je nachdem ob die hierarchischen Knotenpunkte auf- oder zugeklappt sind. Das bedeutet jedoch nicht, dass die Anzahl der Zeilen variiert. Nur die Anzeige verändert sich, nicht die Daten ansich.

Es ist wichtig, dieses Prinzip zu verstehen, weil die programmierte Verwaltung hierarchischer Listboxen immer auf den Daten der Arrays basiert und nicht auf den angezeigten Daten. Speziell die automatisch hinzugefügten Umbruchzeilen werden im Array mit den Anzeigeoptionen nicht berücksichtigt. Weitere Informationen dazu finden Sie im späteren Abschnitt “Umbruchzeilen verwalten”.

Nehmen wir z.B. folgende Arrays:

Beim Anzeigen in hierarchischer Form erscheint der Eintrag "Freising" nicht in der zweiten, sonderen in der vierten Zeile, weil zwei Umbruchzeilen hinzugefügt werden:

Unabhängig von der Darstellung der Daten in der Listbox (hierarchisch oder nicht), wollen Sie die Zeile mit "Freising" in Fettschrift setzen, müssen Sie die Anweisung Stil{2} = bold schreiben. Denn es wird nur die Position der Zeile in den Arrays berücksichtigt.

Dieses Prinzip gilt für interne Arrays. Sie können damit folgende Elemente verwalten:

  • Farben
  • Hintergrundfarben
  • Stilelemente
  • Ausgeblendete Zeilen
  • Auswahlen

Um z.B. die Zeile mit Rosenheim auszuwählen, müssen Sie folgendes übergeben:

 ->MyListbox{3}:=True

Nicht-hierarchische Darstellung:

Hierarchische Darstellung:

Hinweis: Sind eine oder mehrere Zeilen ausgeblendet, weil das übergeordnete Element zugeklappt ist, sind sie nicht mehr ausgewählt. Nur sichtbare Zeilen lassen sich auswählen, sei es direkt oder durch Scrollen. Mit anderen Worten, Zeilen können nicht gleichzeitig ausgeblendet und ausgewählt sein.

Analog zu Auswahlen gibt der Befehl LISTBOX GET CELL POSITION für eine hierarchische bzw. eine nicht-hierarchische Listbox denselben Wert zurück. Das bedeutet, dass dieser Befehl in beiden nachfolgenden Beispielen dieselbe Position zurückgibt, nämlich: (3;2)

Nicht-hierarchische Darstellung:

Hierarchische Darstellung:

Wählt der Benutzer eine Umbruchzeile, gibt LISTBOX GET CELL POSITION das erste Auftreten der Zeile im entsprechenden Array an. Für das folgende Array:

gibt LISTBOX GET CELL POSITION die Position (2;4) zurück. Um eine Umbruchzeile per Programmierung auszuwählen, müssen Sie den Befehl LISTBOX SELECT BREAK verwenden.

Umbruchzeilen werden in internen Arrays zur Verwaltung der grafischen Darstellung von Listboxen (Stilarten und Farben) nicht berücksichtigt. Sie können die Merkmale für Umbruchzeilen jedoch über die Befehle zur grafischen Verwaltung von Objekten (im Kapitel Objekte (Formulare)) verändern. Dazu müssen Sie nur die entsprechenden Befehle für die Arrays ausführen, welche die Hierarchie enthalten.

Nehmen wir z.B. nachfolgende Listbox (die Namen der zugewiesenen Arrays sind in Klammern angegeben):

Nicht-hierarchische Darstellung:

Hierarchische Darstellung:

Im hierarchischen Modus werden Umbruchzeilen nicht von den Arrays für Stiländerungen mit Namen tStyle und tColor berücksichtigt. Um Farbe oder Stil von Umbruchebenen zu ändern, müssen Sie folgende Anweisung ausführen:

 OBJECT SET RGB COLORS(T1;0x0000FF;0xB0B0B0)
 OBJECT SET FONT STYLE(T2;Bold)

Hinweis: In diesem Kontext kann nur die Syntax, welche die Array Variable enthält, mit den Befehlen für Objekteigenschaften funktionieren, da die Arrays keine zugewiesenen Objekte haben.

Ergebnis:

Sind alle Zeilen einer Unterhierarchie ausgeblendet, wird die Umbruchzeile ebenfalls ausgeblendet. Werden in Beispiel Deutschland die Zeilen 1 bis 3 ausgeblendet, erscheint die Umbruchzeile "Bayern" nicht. 

Sie können Anzeigen und Arbeiten mit hierarchischen Listboxen mit den beiden Formularereignissen On Expand und On Collapse optimieren. 

Eine hierarchische Listbox wird mit dem Inhalt seiner Arrays aufgebaut, es kann also nur angezeigt werden, wenn all diese Arrays in den Speicher geladen sind. Das erschwert den Aufbau umfangreicher hierarchischer Listboxen über Arrays, die aus Daten generiert werden (mit dem Befehl SELECTION TO ARRAY), nicht nur in Bezug auf die Anzeigegeschwindigkeit, sondern auch in Bezug auf den verwendeten Speicher.

Diese Einschränkungen können Sie über die Formularereignisse On Expand und On Collapse aufheben. Sie können z.B. nur einen Teil der Hierarchie anzeigen und die Arrays gemäß Benutzeraktionen unmittelbar laden/entladen.

Im Kontext dieser Ereignisse gibt der Befehl LISTBOX GET CELL POSITION die Zelle zurück, in die der Benutzer geklickt hat, um eine Zeile auf- oder zuzuklappen.

In diesem Fall müssen Sie Arrays über den Code füllen und leeren. Die Funktionsweise ist wie folgt:

  • Wird die Listbox angezeigt, muss nur das erste Array gefüllt werden. Sie müssen jedoch ein zweites Array mit leeren Werten erstellen, damit die Listbox die Icons zum Auf- und Zuklappen anzeigt:
  • Klickt ein Benutzer auf das Icon Aufklappen, kann das Ereignis On Expand operieren. Der Befehl LISTBOX GET CELL POSITION gibt die entsprechende Zelle zurück und lässt Sie die passende Hierarchie aufbauen: Sie füllen das erste Array mit den wiederholten Werten, das zweite mit den vom Befehl SELECTION TO ARRAY gesendeten Werten und fügen über den Befehl LISTBOX INSERT ROWS soviele Zeilen, wie benötigt werden, in die Listbox ein:
  • Klickt ein Benutzer auf das Icon Zuklappen, kann das Ereignis On Collapse operieren. Der Befehl LISTBOX GET CELL POSITION gibt die entsprechende Zelle zurück: Sie entfernen über den Befehl LISTBOX DELETE ROWS die entsprechenden Zeilen aus der Listbox.



Siehe auch 

Einführung in Listboxen
LISTBOX GET HIERARCHY
LISTBOX SELECT BREAK
LISTBOX SET HIERARCHY

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Listbox

 
GESCHICHTE 

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)