Going easy on listboxes


Die Listboxen waren in der V2004 neu und alle Optionen haben mich schier erschlagen. Jedes Element der Listbox und die Listbox selber konnten eine Methode aufrufen. Die vielen Optionen machen überhaupt keinen Sinn. Das führt zu einem Durcheinander und ist nicht wartbar. Inzwischen wird die gesamte Listbox in einer Projektmethode verarbeitet und sonst nirgends.

listBox_Macro
Die Projektmethode, die alles zusammenhält: Menüaufruf, Formmethode, alle Button-Klicks, Listbox, …

Die Listbox vom Typ Array hat nur einen Objektnamen, ihr wird keine Variable zugewiesen. Das ist der Code, den mein Makro zur Verwaltung der Listbox in die Projektmethode einsetzt:

: ($what=“lb_ObjBücher__@“)
Case of
: ($what=“@_Init“)
$N:=0
// Array definieren
: ($what=“@_Fill“)
BUCH_Mngr („lb_ObjBücher_Init“)
// Arrays füllen
: ($what=“@_Action“)
$countRow_L:=LISTBOX Get number of rows(*;$lb_ObjBücher)
LISTBOX GET CELL POSITION(*;$lb_ObjBücher;$column_L;$row_L;$P_column)

Case of
: (Form event=On Selection Change)

: (Form event=On Double Clicked)

: (Form event=On Data Change)

Else

End case

Else
$keinDollarWhat_b:=True
End case

Vor der Anzeige der Listbox rufe ich
BUCH_Mngr („lb_ObjBücher_Fill“)
und in On Unload räume ich die Listbox so auf
BUCH_Mngr („lb_ObjBücher_Init“)
Nur der Listbox selber ist eine Methode zugewiesen
BUCH_Mngr („lb_ObjBücher_Action“)

So sieht der Code aus, nachdem er mit Leben gefüllt ist

listBox_CodeDone
Ein Bild der Projektmethode, die diese Listbox verwaltet

$keinDollarWhat_b schickt mir eine Meldung, wenn ich weitere Aktionen verwende wie BUCH_Mngr („lb_ObjBücher_Update“) und noch keinen Code dazu eingefügt habe.



Listboxes were new with V2004 and the options looked overwhelming. Every element of the listbox and the listbox itself could have a method attached. Distributing logic all over the place makes no sense at all. It creates a mess and is not maintainable. After a couple of experiments I’m down to run all code in a single projectmethod.

listBox_Macro
A picture of the collapsed projectmethod: menucall = no parameters, formmethod, all button-clicks, listbox, …

A listbox of type array does have no variable attached, only the objectname is important. This is the code-fragment, a macro inserts into the project method to handle all aspects of using listboxes:

: ($what=“lb_ObjBücher__@“)
Case of
: ($what=“@_Init“)
$N:=0
// define arrays
: ($what=“@_Fill“)
BUCH_Mngr („lb_ObjBücher_Init“)
// fill arrays
: ($what=“@_Action“)
$countRow_L:=LISTBOX Get number of rows(*;$lb_ObjBücher)
LISTBOX GET CELL POSITION(*;$lb_ObjBücher;$column_L;$row_L;$P_column)

Case of
: (Form event=On Selection Change)

: (Form event=On Double Clicked)

: (Form event=On Data Change)

Else

End case

Else
$keinDollarWhat_b:=True
End case

Before displaying the listbox I call
BUCH_Mngr („lb_ObjBücher_Fill“)
in On Unload I clear up like this
BUCH_Mngr („lb_ObjBücher_Init“)
The listbox itself calls the projectmethode. No code anywhere else
BUCH_Mngr („lb_ObjBücher_Action“)

Here a picture of some code to handle a listbox

listBox_CodeDone
A picture of the project method with real code to handle a listbox

$keinDollarWhat_b sends me a message, if I implemented actions like BUCH_Mngr („lb_ObjBücher_Update“) without writing the code necessary.