if block wird ignoriert

Anfängerfragen zum Programmieren mit PureBasic.
vimike
Beiträge: 14
Registriert: 27.06.2007 15:51

if block wird ignoriert

Beitrag von vimike »

Hallo!
Ich habe einem Buttongadget einen Wert mit Setgadgetdata zugewiesen. Beim Schalten wird jedoch der erste if Block ignoriert und es geht gleich beim zweiten weiter.

Code: Alles auswählen

If Event= #PB_Event_Gadget


 Gadgetnummer=EventGadget()

X=GetGadgetData(EventGadget())
 If  Gadgetnummer=0 And   X=1
;SetGadgetText(Ergebnis3,A$)

If ReadFile(7,"C:\Dokumente und Einstellungen\Anne\Desktop\TextRPG\TextRPG-Texte\Anfang.txt")

While Eof(7)=0
C$=C$+ReadString(7)

Wend

CloseFile(7)
SetGadgetText(Ergebnis3,C$)
EndIf





 SetGadgetData(0,2) 
 
 
 EndIf 
 
das ist der If Block.
Das ganze Listing ist schon bei 151 Zeilen, etwas zu lang um es hier zu posten.

__________________________________________________
Quote-Tags entfernt und Code-Tags hinzugefügt
07.02.2010
RSBasic


Okay

Code: Alles auswählen


A$=""





;Fenster erstellen
If OpenWindow(1,0,0,400,300,"Tales of Limaena",#PB_Window_SystemMenu |#PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar  )
WindowID=WindowID(1)
Ergebnis1=UseGadgetList(WindowID(1))
Ergebnis3=TextGadget(#PB_Any,0,0,400,200,B$,#PB_Text_Border)

 ButtonGadget(0,10,210,20,20,"A"):SetGadgetData(0,1)
 ButtonGadget(5,40,210,20,20,"B")





;Anfangstext laden
If ReadFile(0,"C:\Dokumente und Einstellungen\Anne\Desktop\TextRPG\TextRPG-Texte\Begin.txt")

While Eof(0)=0
B$=B$+ReadString(0)
Wend

CloseFile(0)
EndIf 

;Anfangstext ausgeben

SetGadgetText(Ergebnis3,B$)

SetGadgetColor(Ergebnis3,#PB_Gadget_BackColor ,RGB($FF,$FF,$FF))

 Repeat
Event =WaitWindowEvent()


 
 

 If Event= #PB_Event_Gadget


 Gadgetnummer=EventGadget()

X=GetGadgetData(EventGadget())
 If  Gadgetnummer=0 And   X=1
;SetGadgetText(Ergebnis3,A$)

If ReadFile(7,"C:\Dokumente und Einstellungen\Anne\Desktop\TextRPG\TextRPG-Texte\Anfang.txt")

While Eof(7)=0
C$=C$+ReadString(7)

Wend

CloseFile(7)
SetGadgetText(Ergebnis3,C$)
EndIf





 SetGadgetData(0,2) 
 
 
 EndIf 
 


 


Gadgetnummer=EventGadget()
X=GetGadgetData(EventGadget())
If Gadgetnummer =0 And X=2

SetGadgetText(Ergebnis3,A$)

If ReadFile(2,"C:\Dokumente und Einstellungen\Anne\Desktop\TextRPG\TextRPG-Texte\Text2.txt")

While Eof(2)=0
D$=D$+ReadString(2)
Wend

CloseFile(2)
SetGadgetText(Ergebnis3,D$)
EndIf 


 SetGadgetData(5,2)
SetGadgetData(0,3) 

 

EndIf 






If Gadgetnummer =5 And X=2

SetGadgetText(Ergebnis3,A$)

If ReadFile(30,"C:\Dokumente und Einstellungen\Anne\Desktop\TextRPG\TextRPG-Texte\Text30.txt")

While Eof(30)=0
G$=G$+ReadString(30)
Wend

CloseFile(30)
SetGadgetText(Ergebnis3,G$)
EndIf 




EndIf 




If Gadgetnummer =0 And X=3


SetGadgetText(Ergebnis3,A$)

If ReadFile(3,"C:\Dokumente und Einstellungen\Anne\Desktop\TextRPG\TextRPG-Texte\Text3.txt")

While Eof(3)=0
E$=E$+ReadString(3)
Wend

CloseFile(3)
SetGadgetText(Ergebnis3,E$)
EndIf 

;Anfangstext ausgeben


EndIf 
 
 
EndIf 
 
 Until Event = #PB_Event_CloseWindow
EndIf 
__________________________________________________
Quote-Tags entfernt und Code-Tags hinzugefügt
07.02.2010
RSBasic
Zuletzt geändert von vimike am 07.02.2010 20:49, insgesamt 1-mal geändert.
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: if block wird ignoriert

Beitrag von HeX0R »

Bei 151 Zeilen muss die Board-Software nur müde lächeln, also poste am besten mal alles.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: if block wird ignoriert

Beitrag von Kaeru Gaman »

Code: Alles auswählen

Gadgetnummer=EventGadget()

X=GetGadgetData(EventGadget())
nicht zweimal die Funktion benutzen, sondern beim zweiten mal die Variable.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: if block wird ignoriert

Beitrag von STARGÅTE »

@vimike

ich verste nicht was du meinst ... und der Code ist schwer testbar wenn einem die txt's fehlen

@Kaeru Gaman
EventGadget() bleibt solange kein WindowEvent() aufgerufen wurde erhalten, er kanns auch auch mehrfach benutzen.
WindowEvent() hingegen sollte nur einmal benutzt werden und dann der Wert gespeichert werden.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
vimike
Beiträge: 14
Registriert: 27.06.2007 15:51

Re: if block wird ignoriert

Beitrag von vimike »

Die Textdateien sind schwer möglich mitzuliefern. Laut VariableViewer wird die Datei korrekt eingelesen nur nicht angezeigt. Aus irgendeinem Grund geht der Programmablauf gleich zum nächsten if Block.
@ Kaeru Gaman
Sorry, aber aus dem kurzen Post kann ich so nichts machen.
aber danke für die Antwort
Benutzeravatar
jojo1541
Beiträge: 431
Registriert: 15.09.2007 17:12
Wohnort: Irgendwo im Nirgendwo

Re: if block wird ignoriert

Beitrag von jojo1541 »

Er meint, dass du die Variable beuntzen sollst...

Statt:

Code: Alles auswählen

Gadgetnummer=EventGadget()

X=GetGadgetData(EventGadget())
dass hier:

Code: Alles auswählen

Gadgetnummer=EventGadget()

X=GetGadgetData(Gadgetnummer)
Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: if block wird ignoriert

Beitrag von Kaeru Gaman »

aus dem kurzen Post kann ich so nichts machen.
doch.
lesen.

ich hab den Teil deines Codes zitiert, der blödsinnig ist.
entweder, du speicherst den Rückgabewert von EventGadget in einer Variablen und verwendest diese dann,
oder du verwendest nur die Funktion und verzichtest auf die Variable.
Beides zusammen ist unnütz.


Textdateien kann man genauso posten, wie man code postet.
... wenn man Code-Tags verwendet, nicht Quote.


und welche If-Blöcke du wie meinst solltest du vielleicht auch dazu schreiben.
welcher wird übergangen, zu welchem wird gesprungen? du hast da ne Menge Ifs drin.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: if block wird ignoriert

Beitrag von Kaeru Gaman »

also, dein Problem ist hier:

Code: Alles auswählen

  Gadgetnummer=EventGadget()
  X=GetGadgetData(EventGadget())
  If  Gadgetnummer=0 And   X=1
    SetGadgetData(0,2)
  EndIf

  Gadgetnummer=EventGadget()
  X=GetGadgetData(EventGadget())
  If Gadgetnummer =0 And X=2
    ; zweites If
  EndIf
erst änderst du per SetGadgetData auf 2, direkt danach holst du noch mal X=GetGadgetData, das ist jetzt logischer weise die 2 die du millisekunden zuvor gesetzt hast.

.... mach nur einmal ganz am Anfang

Code: Alles auswählen

  Gadgetnummer=EventGadget()
  X=GetGadgetData(Gadgetnummer)
am besten Teilst du das auch per Cases auf, also

Code: Alles auswählen

  Gadgetnummer=EventGadget()
  Select Gadgetnummer
dann läufst du nicht Gefahr, im Selben Durchlauf zwei Zweige auszuführen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
vimike
Beiträge: 14
Registriert: 27.06.2007 15:51

Re: if block wird ignoriert

Beitrag von vimike »

das was Kaeru Gaman als blödsinnig bezeichnet ist mein erster Versuch eine Programmsteuerung zu entwickeln nach dem Motto ein Klick auf ein Buttongadget und die Textanzeige im Fenster springt zum nächsten Text
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: if block wird ignoriert

Beitrag von Kaeru Gaman »

Hallo Schatzi!

da steht deine Lösung schon da, also mach dir nicht ins Hemd weil ich dich nicht mit Feenstaub pudere, sondern nimms wie ein Mann und sag DankeSchön für die Hilfe.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten