4D v16.3

Einführung in Listboxen

Home

 
4D v16.3
Einführung in Listboxen

Einführung in Listboxen  


 

 

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

Eine Listbox stellt Daten in Form von Spalten und auswählbaren Zeilen dar und bietet viele Oberflächenfunktionen, wie Werte eingeben, Spalten sortieren, eine Hierarchie anzeigen, wechselnde Farben definieren, etc.

Sie können eine Listbox komplett im 4D Formulareditor einrichten und sie auch über Programmierung verwalten. Weitere Informationen dazu finden Sie im Kapitel Listboxen des Handbuchs 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, die nachfolgend erläutert werden.

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.

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 OBJECT SET FORMAT definieren.

Zum Verwalten der Werte in den Spalten (Eingabe und Anzeige) per Programmierung dienen Befehle für Listboxen, z.B. LISTBOX INSERT ROWS oder LISTBOX DELETE ROWS, 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.

Bei diesem Typ lä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 Listboxen vom Typ Auswahl nicht die Befehle LISTBOX INSERT ROWS und LISTBOX DELETE ROWS 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 LISTBOX SET TABLE SOURCE können Sie die der Listbox zugeordnete Tabelle per Programmierung verändern.

Das Objekt Listbox besteht aus vier voneinander unabhängigen Elementen:

  • Das Objekt selbst
  • Spalten
  • Kopfteile der Spalten. Sie können ein- oder ausgeblendet sein (standardmäßig angezeigt)
  • Fußteile der Spalten. Sie können ein- oder ausgeblendet sein (standardmäßig ausgeblendet)

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, Fußteile Footer1, 2 ... X, sie sind unabhängig vom Objekt Listbox selbst. Beachten Sie, dass derselbe Name für die Objekte und die dazugehörigen Variablen verwendet wird, mit Ausnahme der Fußteile (Variablen für Fußteile sind standardmäßig leer; 4D verwendet dynamische Variablen). 

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 Objekte (Formulare), die für Listboxen geeignet sind. Je nach Funktionalität gelten sie für die gesamte Listbox, für Spalten, Spaltentitel bzw. Fußteile. Das entsprechende Element übergeben Sie mit seinem Namen oder über die dazuhörige Variable.

Nachfolgende Tabelle zeigt die jeweilige Reichweite der Befehle aus dem Kapitel Objekte (Formulare) an, die für Listboxen verwendbar sind:

Befehl ObjekteigenschaftenObjektSpaltenKopfteile der SpaltenFußteile der Spalten
OBJECT MOVEX
OBJECT GET COORDINATES XXXX
OBJECT SET RESIZING OPTIONS X
OBJECT GET RESIZING OPTIONS  X
OBJECT GET BEST SIZEX
OBJECT SET FILTERX
OBJECT SET FORMAT XXX
OBJECT SET ENTERABLE X
OBJECT SET LIST BY NAME X
OBJECT SET TITLEX
OBJECT SET COLORXXXX
OBJECT SET RGB COLORSXXXX
OBJECT SET FONTXXXX
OBJECT SET FONT SIZEXXXX
OBJECT SET FONT STYLEXXXX
OBJECT SET HORIZONTAL ALIGNMENTXXXX
OBJECT Get horizontal alignmentXXXX
OBJECT SET VERTICAL ALIGNMENTXXXX
OBJECT Get vertical alignmentXXXX
OBJECT SET VISIBLEXXXX
OBJECT SET SCROLLBARX
OBJECT SET SCROLL POSITIONX

Hinweis: Bei Listboxen vom Typ Array lassen sich Stil, Farbe für Schrift oder Hintergrund und Sichtbarkeit für jede Zeile getrennt angeben. Dies wird über Arrays verwaltet, die der Listbox in der Eigenschaftenliste zugewiesen werden. Über den Befehl LISTBOX GET ARRAYS können Sie die Namen dieser Arrays per Programmierung herausfinden.

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 in deren Kopfteil und Fußteil eintreten

Verwenden Sie den Befehl OBJECT 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 OBJECT SET VISIBLE(*;"header3";False) alle Spaltentitel im Objekt Listbox aus, zu denen „header3“ gehört und nicht allein diesen Titel.

Um die Sichtbarkeit dieser Objekte über den Befehl OBJECT SET VISIBLE zu verwalten, müssen sie in der Listbox auf der Ebene des Formulareditors angezeigt werden, d.h. für das Objekt muss in der Eigenschaftenliste die Option Kopfteil anzeigen bzw. Fußteil anzeigen markiert sein.

Die Funktion OBJECT Get pointer wird mit der Konstante Object with focus oder Object current verwendet (früher die Funktionen Focus object und Self). Sie lässt sich in der Objektmethode einer Listbox bzw. einer Spalte der Listbox verwenden. Sie geben einen Zeiger auf die Listbox, die Spalte der Listbox (1) oder die Variable des Kopfteils zurück. Nachfolgende Tabelle zeigt die Funktionsweise im Einzelnen:

EreignisObjekt mit Fokusaktuelles Objekt
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 Open DetailNillist box (**)
On Close DetailNillist box (**)
On Header ClickListboxKopfteil
On Footer ClickListboxFußteil
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 OBJECT Get pointer 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:=OBJECT Get pointer(Object with focus)
  ` $Column enthält einen Zeiger auf Sp2
 $Row:=$Column-> `$Row ist gleich 5

Bei einer Listbox vom Typ Auswahl, gibt die Funktion OBJECT Get pointer 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.

Der Befehl OBJECT SET SCROLL POSITION lässt sich mit einer Listbox verwenden. Er scrollt in den Zeilen, so dass die erste gewählte oder angegebene Zeile angezeigt wird.

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

REDRAW  

Wird REDRAW (Kapitel "Benutzeroberfläche) auf eine Listbox vom Typ Auswahl angewandt, löst er die Aktualisierung der in der Listbox angezeigten Daten aus.

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

Es gibt spezifische Formularereignisse zum Verwalten von Listboxen, insbesondere für Drag-and-Drop und Sortieroperationen. Weitere Informationen dazu finden Sie unter der Funktion Form event.

Drag-and-Drop von Daten in Listboxen wird über die Routinen Drop position und DRAG AND DROP PROPERTIES verwaltet. Sie wurden speziell an Listboxen angepasst.

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

Damit eine Zelle der Listbox eingebbar ist, müssen folgende Bedingungen erfüllt sein:

  • Die Zelle der Spalte muss auf Eingebbar gesetzt sein (sonst können die Zellen der Spalte nie eingebbar sein).
  • Im Ereignis On Before Data Entry gibt $0 nicht -1 zurück.
    Gelangt der Cursor in die Zelle, wird das Ereignis On Before Data Entry in der Methode der Spalte erzeugt. Wird dann im Rahmen dieses Ereignisses $0 auf -1 gesetzt, wird die Zelle als nicht-eingebbar gewertet. Wird das Ereignis nach Drücken der Tasten Tab oder Shift+Tab erzeugt, geht der Fokus entweder zur nächsten oder zur vorigen Zelle. Ist $0 nicht -1 ($0 ist standardmäßig 0), ist die Zelle eingebbar und wechselt in den Eingabemodus.

Nehmen wir z.B. eine Listbox mit zwei Arrays, eins vom Typ Datum, das andere vom Typ Text. Das Array Datum ist nicht eingebbar, das Array Text ist eingebbar, solange noch kein Datum übertragen wurde.

Hier ist die Methode zur Spalte arrText:

 Case of
    :(Form event=On Before Data Entry// eine Zelle erhält den Fokus
       LISTBOX GET CELL POSITION(*;"lb";$col;$row)
  // Identifikation der Zelle
       If(arrDate{$row}<Current date// ist das Datum früher als heute
          $0:=-1 // Zelle ist NICHT eingebbar
       Else
  // sonst ist Zelle eingebbar
       End if
 End case

Hinweis: Ab 4D v13 wir das Ereignis On Before Data Entry vor On Getting Focus erzeugt.

Um die Datenkonsistenz für Listboxen vom Typ Auswahl zu bewahren, wird ein geänderter Datensatz gesichert, sobald die Zelle bestätigt wird (falls gesetzt, wird der Trigger On saving an existing record aufgerufen), dann wird das Ereignis On Data Change ausgeführt. Der typische Ablauf der Ereignisse, die beim Eingeben oder Ändern von Daten erzeugt werden, ist wie folgt:

AktionAblauf der Ereignisse
Eine Zelle wechselt in den BearbeitungsmodusOn Before Data Entry / On Getting Focus
Ihr Wert wird geändertOn Before Keystroke / On After Keystroke / On After Edit
Ein Benutzer bestätigt und verlässt die Zelle (Tab, Klick, etc.)Sichern (Trigger On saving an existing record) / On Data Change / On Losing Focus

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 aufeinanderfolgende Klicks. Alle Spalten werden immer automatisch aufeinander abgestimmt. Um die Standardsortierung zu unterbinden, deaktivieren Sie für die Listbox die Eigenschaft “Sortierbar”.

Der Entwickler kann über den Befehl LISTBOX SORT 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 LISTBOX SORT 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.

Hinweis: Der Befehl OBJECT SET FORMAT bietet spezifische Unterstützung für Icons in Kopfteilen von Listboxen. Das ist z.B. hilfreich, wenn Sie einen eigenen Icon zum Sortieren verwenden wollen.

Auswahlen 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 verwaltet, die Sie bei Bedarf verändern können. Sie hat standardmäßig den Namen $ListboxSetX (X startet bei 0 und erhöht sich gemäß der Anzahl Listboxen im Formular). 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 LISTBOX SELECT ROW können Sie per Programmierung eine oder mehrere Zeilen in der Listbox wählen.
    Über die der Listbox zugeordnete Variable können Sie Auswahlen von Objektzeilen erhalten, setzen oder speichern. 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 Formular
 If(tBListBox{1}=True)
    tBListBox{1}:=False
 Else
    tBListBox{1}:=True
 End if

Weitere Informationen dazu finden Sie im Abschnitt Hierarchische Listboxen verwalten.

Ab 4D v12 lassen sich Listboxen auch drucken. Es gibt zwei Druckmodi: Vorschau, um eine Listbox wie ein Formularobjekt zu drucken und Erweitert, um direkt das Drucken des Objekts Listbox innerhalb des Formulars zu steuern. Über eine neue Eigenschaft lässt sich die Druckdarstellung für Listbox Objekte festlegen.

In diesem Modus wird die Listbox über die standardmäßigen Druckbefehle oder den Menübefehl Drucken direkt mit dem Formular gedruckt. Die Listbox wird gedruckt, so wie sie im Formular ist. In diesem Modus lässt sich das Drucken des Objekts nicht präzise steuern, so können Sie bei einer Listbox nicht alle Zeilen drucken, wenn sie mehr enthält als angezeigt werden können.

Dieser Modus führt das Drucken von Listboxen über den Befehl Print object per Programmierung aus (Projektformulare und Tabellenformulare werden unterstützt). Über den Befehl LISTBOX GET PRINT INFORMATION lässt sich der Druck des Objekts steuern.

Dieser Modus führt folgendes aus:

  • Die Höhe der Listbox wird automatisch verringert, wenn die Anzahl der zu druckenden Zeilen kleiner als die ursprüngliche Höhe des Objekts ist (leere Zeilen werden nicht gedruckt). Die Höhe vergrößert jedoch nicht automatisch gemäß dem Inhalt des Objekts. Die Größe des aktuell gedruckten Objekts lässt sich über den Befehl LISTBOX GET PRINT INFORMATION erhalten.
  • Das Objekt Listbox wird so wie es ist gedruckt, d.h. unter Berücksichtigung der aktuellen Parameter, wie sichtbare Spaltentitel und Rasterlinien, ausgeblendete und angezeigte Zeilen, etc. Diese Parameter enthalten auch die erste zu druckende Zeile: Rufen Sie den Befehl OBJECT SET SCROLL POSITION vor dem Drucken auf, ist die erste gedruckte Zeile in der Listbox die Zeile, welche der Befehl angibt.
  • Eine automatische Operation ermöglicht, Listboxen zu drucken, die mehr Zeilen enthalten als angezeigt werden können: durch aufeinanderfolgende Aufrufe der Funktion Print object lässt sich jedes Mal ein neuer Satz Zeilen drucken. Über den Befehl LISTBOX GET PRINT INFORMATION lässt sich der Status während dem Drucken prüfen.

Es gibt verschiedene Wege, um Hintergrundfarbe, Schriftfarbe oder -stil für Listboxen zu setzen:

  • Eigenschaften des Objekts Listbox
  • Eigenschaften der Spalte
  • Verwenden von Arrays oder Methoden für die Listbox bzw. pro Spalte
  • Textbereich einer Zelle (bei Text mit Mehrfachstil)

Es gibt auch Regeln für Priorität und Vererbung.

Wird dieselbe Eigenschaft auf mehr als einer Ebene gesetzt, gilt folgende Priorität:

hohe PrioritätZelle (bei Text mit Mehrfachstil)
Spalten Arrays/Methoden
Listboxen Arrays/Methoden
Spalteneigenschaften
low priorityListboxen Eigenschaften

Setzen Sie z.B. einen Schriftstil in den Listbox Eigenschaften und einen anderen über ein Array Stil für die Spalte, wird der letzte berücksichtigt.

Wir nehmen eine Listbox, in der die Zeilen in den Farben grau/hellgrau wechseln. Das ist in den Eigenschaften der Listbox definiert. Für diese Listbox wurde auch ein Array Hintergrundfarbe gesetzt, um die Farbe der Zeilen in orange zu wechseln, wenn mindestens ein Wert negativ ist:

 <>_BgndColors{$i}:=0x00FFD0B0 // orange
 <>_BgndColors{$i}:=-255 // Standardwert

Als nächstes wollen wir die Farbe der Zellen mit negativen Werten in dunkelorange setzen. Dazu setzen Sie ein Array Hintergrundfarbe für jede Spalte, zum Beispiel <>_BgndColor_1, <>_BgndColor_2 und <>_BgndColor_3. Die Werte dieser Arrays haben Priorität vor den anderen, die in den Listbox Eigenschaften und im Array Hintergrundfarbe gesetzt wurden:

 <>_BgndColorsCol_3{2}:=0x00FF8000 // dunkelorange
 <>_BgndColorsCol_2{5}:=0x00FF8000
 <>_BgndColorsCol_1{9}:=0x00FF8000
 <>_BgndColorsCol_1{16}:=0x00FF8000

Dasselbe Ergebnis erhalten Sie über die Befehle LISTBOX SET ROW FONT STYLE und LISTBOX SET ROW COLOR. Diese haben den Vorteil, dass Sie keine Arrays Stil/Farbe für die Spalten definieren müssen, denn die Befehle erstellen diese Arrays dynamisch.

Für jedes Attribut (Stil, Farbe und Hintergrundfarbe) ist mit dem Standardwert eine Vererbung implementiert:

  • Für Attribute von Zellen: Attributwerte der Zellen
  • Für Attribute von Zeilen: Attributwerte der Spalten
  • Für Attribute von Spalten: Attributwerte der Listbox

Soll also ein Objekt den Attributwert einer höheren Ebene erben, können Sie im entsprechenden Befehl oder direkt im Element des Array Stil/Farbe die Konstante lk inherited (Standardwert) übergeben.

Wir nehmen eine Listbox mit einem standardmäßigen Schriftstil mit wechselnden Farben: 

Führen Sie folgende Änderungen aus:

  • Über die Eigenschaft Zeilen Hintergrundfarbe Array der Listbox den Hintergrund von Zeile 2 auf rot setzen
  • Über die Eigenschaft Zeilenstil Array der Listbox den Stil von Zeile 4 in kursiv setzen
  • Über die Eigenschaft Zeilenstil Array von Spalte 5 zwei Elemente in fett ändern
  • Über die Eigenschaft Zeilen Hintergrundfarbe Array für Spalte 1 und 2 die beiden Elemente in dunkelblau ändern:

Um die ursprüngliche Darstellung der Listbox wiederherzustellen, können Sie folgendes ausführen:

  • Die Konstante lk inherited in Element 2 des Array Hintergrundfarbe für Spalte 1 und 2 verwenden: Dann erben sie die rote Hintergrundfarbe der Zeile.
  • Die Konstante lk inherited in den Elementen 3 und 4 des Array Stil für Spalte 5 anwenden: Dann erben sie den standardmäßigen Stil, außer für Element 4, es wechselt in kursiv, wie im Array Stil der Listbox angegeben.
  • Die Konstante lk inherited in Element 4 des Array Stil für die Listbox anwenden, um den Stil kursiv zu entfernen.
  • Die Konstante lk inherited in Element 2 des Array Hintergrundfarbe für die Listbox anwenden, um die ursprünglich wechselnde Farbe der Listbox wiederherzustellen.

In einer Listbox vom Typ Array können Sie für jede Zeile die Oberflächeneigenschaften "ausgeblendet", "deaktiviert" und "auswählbar" verwenden.

Diese Einstellung wird über die Zeilenkontrolle Array verwaltet,  die sie über den Befehl LISTBOX SET ARRAY oder die Eigenschaftenliste setzen können:

Zeilenkontrolle Array muss vom Typ Lange Ganzzahl sein und die gleiche Anzahl Zeilen haben wie die Listbox. Weitere Informationen dazu finden Sie im Abschnitt Eigenschaften für Listboxen.

Jedes Element von Zeilenkontrolle Array setzt den Status der Oberfläche für die entsprechende Zeile in der Listbox. Drei Oberflächeneigenschaften sind über Konstanten unter dem Thema "List Box" verfügbar:

Konstante Typ Wert Kommentar
lk row is disabled Lange Ganzzahl 2 Die entsprechende Zeile ist deaktiviert. Text und Kontrollkästchen sind gedimmt oder in Grauschrift. Eingebbare Textbereiche sind nicht mehr eingebbar. Standardwert: Aktiviert
lk row is hidden Lange Ganzzahl 1 Die entsprechende Zeile ist ausgeblendet. Das betrifft nur die Darstellung der Listbox. Ausgeblendete Zeilen sind weiterhin in den Arrays vorhanden und lassen sich per Programmierung steuern. Die Befehle der Programmiersprache, insbesondere LISTBOX Get number of rows oder LISTBOX GET CELL POSITION, ignorieren den Status angezeigt/ausgeblendet von Zeilen. Zum Beispiel gibt in einer Listbox mit 10 Zeilen, von denen 9 ausgeblendet sind, der Befehl LISTBOX Get number of rows 10 zurück. Auf Benutzerseite ist nicht ersichtlich, ob es ausgeblendete Zeilen in der Listbox gibt. Nur sichtbare Zeilen lassen sich auswählen, z.B. über den Befehl Alle auswählen. Standardwert: Sichtbar
lk row is not selectable Lange Ganzzahl 4 Die entsprechende Zeile ist nicht auswählbar (sie lässt sich nicht markieren). Eingebbare Textbereiche sind nicht länger eingebbar, außer die Option "Einzelklick Editieren" ist aktiviert. Kontrollen wie Optionsfelder und PopUp-Menüs funktionieren jedoch weiterhin. Diese Einstellung wird ignoriert, wenn als Auswahlmodus für Listbox "Nichts" markiert ist. Standard: Auswählbar

Um den Status für eine Zeile zu ändern, müssen Sie nur die passende Konstante bzw. Konstanten für das entsprechende Array Element setzen. Soll z.B. Zeile 10 nicht auswählbar sein, schreiben Sie folgenden Code:

 aLControlArr{10}:=lk row is not selectable

Sie können auch mehrere Oberflächeneigenschaften gleichzeitig definieren:

Beachten Sie, dass Setzen eines Elements die anderen Optionen für dieses Element aufhebt. Zum Beispiel:

 aLControlArr{6}:=lk row is disabled+lk row is not selectable //setzt Zeile 6 auf deaktiviert UND nicht auswählbar
 aLControlArr{6}:=lk row is disabled //setzt Zeile 6 auf deaktiviert, aber wieder auswählbar

Sie können die Ergebnisse einer SQL-Anfrage direkt in ein Array vom Typ Listbox setzen. So können Sie sich rasch die Ergebnisse von SQL Anfragen ansehen. Es sind nur Suchläufe vom Typ SELECT möglich (siehe Handbuch 4D SQL Reference). Dieser Mechanismus lässt sich nicht mit einer externen SQL Datenbank verwenden.

Dabei gilt folgendes:

  • Sie erstellen die Listbox zum Empfangen des Suchergebnisses. Die Datenquelle der Listbox muss vom Typ Array sein.
  • Führen Sie eine SQL-Suche vom Typ SELECT aus und weisen Sie das Ergebnis der mit der Listbox verknüpften Variablen zu. Sie können die 4D Tags Begin SQL/End SQL verwenden.
  • Listbox-Spalten lassen sich vom Benutzer sortieren oder ändern.
  • Bei erneuter Ausführung einer Anfrage mit SELECT werden die Spalten neu gefüllt. Es ist nicht möglich, dieselbe Listbox mit mehreren SELECT Anfragen nacheinander zu füllen.   
  • Es wird empfohlen, der Listbox die gleiche Anzahl Spalten zu geben wie im Ergebnis der SQL Anfrage sind. Gibt es weniger Listbox-Spalten als für die SELECT Anfrage erforderlich, werden automatisch Spalten hinzugefügt. Gibt es mehr Spalten als für die SELECT Anfrage erforderlich, werden die nicht benötigten Spalten automatisch ausgeblendet.
    Hinweis: Den automatisch hinzugefügten Spalten werden Variablen vom Typ Dynamische Variablen zugewiesen, d.h. sie bestehen solange wie das Formular. Eine dynamische Variable wird auch für jeden Kopfteil erstellt. Beim Aufrufen des 4D Befehls LISTBOX GET ARRAYS enthält der Parameter arrColVars Zeiger auf die dynamischen Arrays und der Parameter arrHeaderVars Zeiger auf die dynamischen Kopfteilvariablen. Ist die hinzugefügte Spalte z.B. die fünfte Spalte, lautet ihr Name sql_column5 und ihr Kopfteil sql_header5.
  • Im interpretierten Modus lassen sich vorhandene Arrays, welche die Listbox verwendet, automatisch entsprechend der von der SQL-Anfrage gesendeten Daten erneut tippen.

Beispiel:
Wir wollen nach allen Datenfeldern der Tabelle [PEOPLE] suchen und den Inhalt mit der Variablen vlistbox in die Listbox setzen. Für die Objektmethode einer Schaltfläche (als eine Möglichkeit) schreiben Sie:

 Begin SQL
    SELECT * FROM PEOPLE INTO <<vlistbox>>
 End SQL



Siehe auch 


Hierarchische Listboxen verwalten

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Listbox

 
GESCHICHTE 

Geändert: 4D v15 R4

 
ARTIKELVERWENDUNG

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