DO CASE über Eval(), oder FOR NEXT?
Verfasst: Do, 18. Mai 2006 20:22
Hallo,
ich habe mal wieder eine tolle Frage parat.
Gibt es irgendeine Möglichkeit die DO CASE Anweisung auch über eine Schleife mit dem Array zu verbinden? Ich habe ein paar Dinge ausprobiert, aber irgendwie will es mir nicht gelingen. Es wäre ja schön, wenn man das Array irgendwie einbinden könnte, sonst müßte man ja vorher immer wissen, wie groß das Array ist. Es gibt doch Menues, die aus einer DB gefüttert werden können? Ich finde auch auf die Schnelle nichts in den Beispielen..
ich habe mal wieder eine tolle Frage parat.
Code: Alles auswählen
LOCAL aPromptArray := {;
{"Menue1","menue1()","Menue1"},;
{"Menue2","menue2()","Menue2"},;
{"Menue3","menue3()","Menue3"},;
{"Menue4","menue4()","Menue4"},;
{"Menue5","menue5()","Menue5"},;
{"Ende" ,"AppQuit()" ,"Programmende"};
}
ASort(aPromptArray,,LEN(aPromptArray)-1,{|aX,aY| aX[1] < aY[1]}) // sortieren, damit die alphabetische Reihenfolge bleibt, aber ohne Programmende, deshalb (-1)
DO WHILE .T.
nY := 4
nX := MAXCOL()/2-4
nAuswahl := LEN(aPromptArray)
FOR nI := 1 TO nAuswahl
IF nI < nAuswahl // damit das letzte Prompt (Ende) kein Zeichen davor bekommt
IF nI > 9
cZahl := CHR(nI+55) + ")" // hier werden große Buchstaben generiert
ELSE
cZahl := CHR(nI+48) + ")" // Zahlen von 1-9
ENDIF
ELSE
cZahl := ""
ENDIF
@ nY,nX PROMPT cZahl + aPromptArray[nI,1] MESSAGE aPromptArray[nI,3]
nY += 2
NEXT
MENU TO nAuswahl
DO CASE
CASE nAuswahl = 1
&(aPromptArray[1,2])
CASE nAuswahl = 2
&(aPromptArray[2,2])
CASE nAuswahl = 3
&(aPromptArray[3,2])
CASE nAuswahl = 4
&(aPromptArray[4,2])
CASE nAuswahl = 5
&(aPromptArray[5,2])
ENDCASE
ENDDO .T.