Schleife vorzeitig beenden

Anfängerfragen zum Programmieren mit PureBasic.
Schlaubi
Beiträge: 16
Registriert: 09.12.2011 16:04

Schleife vorzeitig beenden

Beitrag von Schlaubi »

Hallo,

ich habe ein kleines Tool geschrieben. Wenn ein User OK klickt, wird geprüft, ob alle Felder ausgefüllt wurden:
If GetGadgetText(#String_1)=""
MessageRequester("blabla","")
endif

So, nun wird die Schleife logischerweise weiter ausgeführt, ich will diese aber unterbrechen, dass der User die Möglichkeit hat noch etwas einzugeben. Mit Break hab ich es auch versucht, dann beendet aber die Software ganz. Wie kann ich das realisieren?

Danke
Daniel
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Schleife vorzeitig beenden

Beitrag von STARGÅTE »

Wäre nett wenn du "die Schleife", von der du Sprichst auch mit postest (zumindest teilweise) und bitte in Code-Tags
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
Schlaubi
Beiträge: 16
Registriert: 09.12.2011 16:04

Re: Schleife vorzeitig beenden

Beitrag von Schlaubi »

ok

Code: Alles auswählen

Repeat
    Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      End
    Case #PB_Event_Gadget
      If EventGadget() = #Button_0

; Jetzt folgt die gemeinte Schleife
[b]        If GetGadgetText(#String_7) Or GetGadgetText(#String_17) Or GetGadgetText(#String_27)=""
          MessageRequester("No Mail-Address","You need to enter a Mail Address at least!")
          Break 
        EndIf[/b]

; und der rest
     EndIf
  EndSelect
 ForEver
Danke schonmal
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Schleife vorzeitig beenden

Beitrag von ts-soft »

Ich denke mal, es geht um eine If Schleife <)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Schleife vorzeitig beenden

Beitrag von STARGÅTE »

@Schlaubi:

Was willst du denn bezwecken?
Wenn du nach dem MessageRequester() auf OK klickst, wird doch der Code normal weiter ausgeführt ohne das Break, und der User kann seine Eingabe korrigieren.

Ansonsten gibt es noch das Continue, es veranlasst die Schleife, wieder am Anfang zu beginnen. So verhindest du das bei keiner richtigen Eingabe, alle Fehler angezeigt werden, sondern nur der erste.
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
Schlaubi
Beiträge: 16
Registriert: 09.12.2011 16:04

Re: Schleife vorzeitig beenden

Beitrag von Schlaubi »

Hi, danke
mit Continue konnte ich es realisieren, dass der User seine Eingabe nun noch ändern kann.

Danke
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Schleife vorzeitig beenden

Beitrag von Kiffi »

Anmerkung:
Schlaubi hat geschrieben:

Code: Alles auswählen

If GetGadgetText(#String_7) Or GetGadgetText(#String_17) Or GetGadgetText(#String_27)=""
das wird wohl nicht so funktionieren, wie Du Dir das meines Erachtens vorstellst.

Du prüfst hier nicht, ob String_7 oder String_17 oder String_27 leer sind, sondern
ob String_7 nicht leer oder String_17 nicht leer oder String_27 leer ist.

wenn dem so ist, dann solltest Du Deinen Code wie folgt abändern.

Code: Alles auswählen

If GetGadgetText(#String_7) = "" Or GetGadgetText(#String_17) = "" Or GetGadgetText(#String_27)=""
Grüße ... Kiffi

P.S.: In Deinem eigenen Interesse solltest Du Deine Gadget-Bezeichnungen
aussagekräftiger gestalten. Wenn Du nach längerer Zeit mal Deinen Code
bearbeiten solltest, dann wirst Du auch nicht auf Anhieb wissen, was #String_7
ist. Besser wäre hier sowas wie #txtMailAdresse (zum Beispiel).

P.P.S.: Das mit dem Continue scheint mir auch ne Krücke zu sein. Das kann man
sauberer programmieren.
a²+b²=mc²
Antworten