ich habe ein Problem mit der Defined-Funktion. Bedauerlicherweise kann ich das Problem nur beschreiben, aber es nicht mit einem Kodestück reproduzieren, weil es nur in meinem kompletten Programm auftritt, nicht aber in scheinbar identischen kürzeren Kodestücken. Aber vielleicht kann mir ja trotzdem jemand helfen.
Also: Ich habe ein Fenster mit diversen Schaltflächen und folgerichtig auch eine Repeat-Until-Schleife, die zu den entsprechenden Cases springt, wenn eine Schaltfläche angeklickt wird. Die Schleife selber arbeitet absolut perfekt, dort liegt also nicht der Fehler. Der Case, in dem der Fehler auftritt, hat folgende Struktur:
Code: Alles auswählen
Case #Bs_Abk ; Abkürzungen
If Not Defined(Ad, #PB_Variable)
Define …
Define …
Define Ad.s
Select GetGadgetText(#Lz_S)
Case "Englisch"
Ad="Englisch Abkürzungen.txt" ; Abkürzungsdatei
Case "Russisch"
Ad="Russisch Abkürzungen.txt"
EndSelect
…
…
EndIf
OpenWindow(2, 0, 0, BrAbk+Brag+30, HAf+20, #Empty$,
#PB_Window_BorderLess|#PB_Window_WindowCentered, WindowID(0))
UseGadgetList(WindowID(2))
TextGadget(#Bz_Abk, 10, 10, BrAbk, HAf, IAbkb)
TextGadget(#Bz_ag, BrAbk+20, 10, Brag, HAf, IagB)
Repeat: Until WaitWindowEvent()=#WM_LBUTTONDOWN
CloseWindow(2)
EndSelect
Code: Alles auswählen
If Not Defined(Ad, #PB_Variable)
Das Problem besteht nun darin, daß der If-Block auch dann abgearbeitet wird, wenn Ad bereits deklariert ist (also beim zweiten Anklicken der Schaltfläche). Ad hat sogar einen Wert, was mir der Debugger bei der Einzelschrittabarbeitung bestätigt (Ad = "Englisch Abkürzungen.txt"), und trotzdem wird in den If-Block verzweigt, anstatt ihn zu überspringen.
Deklariert man Ad vorher (vor der Select/EndSelect-Struktur) und ändert
Code: Alles auswählen
If Not Defined(Ad, #PB_Variable)
Code: Alles auswählen
If Ad=#Empty$
Hat irgendjemand eine Idee, wieso If Not Defined nicht funktioniert wie geplant?
Vielen Dank