German Problem beim Beenden von Schleife

so27

Active Member
Licensed User
Longtime User
Hallo zusammen,

ich habe ein kleines Problem mit dem Beenden einer Do/Loop Schleife. In dieser Schleife sollen die Buchstaben von A-Z sich immer wiederholend durchlaufen. Das funktioniert auch einwandfrei. Sobald der Button "Stopp" gedrückt wird, soll die Schleife bei dem zuletzt angezeigten Buchstaben anhalten.

Das klappt auch, ABER... Nachdem mir der Buchstabe angezeigt wird (MsgBox), welcher eben an der Reihe war, als ich den Stopp-Button gedrückt habe, läuft die Schleife bis zum Buchstaben "Z" weiter.

Jetzt meine Frage:
Wie kann ich es bewerkstelligen, dass sobald ich auf den Button "Stopp" klicke, die Schleife komplett unterbrochen wird und der entsprechende Buchstabe angezeigt wird?

Hier mein Code:
B4X:
Sub btnStart_Click

    Stopp=False
    
    Do While True

        If Stopp=True Then Exit
        Sleep(0)
        
        lblZufallsbuchstabe.Text = "A" : Sleep(100)
        lblZufallsbuchstabe.Text = "B" : Sleep(100)
        lblZufallsbuchstabe.Text = "C" : Sleep(100)
        lblZufallsbuchstabe.Text = "D" : Sleep(100)
        lblZufallsbuchstabe.Text = "E" : Sleep(100)
        lblZufallsbuchstabe.Text = "F" : Sleep(100)
        lblZufallsbuchstabe.Text = "G" : Sleep(100)
        lblZufallsbuchstabe.Text = "H" : Sleep(100)
        lblZufallsbuchstabe.Text = "I" : Sleep(100)
        lblZufallsbuchstabe.Text = "J" : Sleep(100)
        lblZufallsbuchstabe.Text = "K" : Sleep(100)
        lblZufallsbuchstabe.Text = "L" : Sleep(100)
        lblZufallsbuchstabe.Text = "M" : Sleep(100)
        lblZufallsbuchstabe.Text = "N" : Sleep(100)
        lblZufallsbuchstabe.Text = "O" : Sleep(100)
        lblZufallsbuchstabe.Text = "P" : Sleep(100)
        lblZufallsbuchstabe.Text = "Q" : Sleep(100)
        lblZufallsbuchstabe.Text = "R" : Sleep(100)
        lblZufallsbuchstabe.Text = "S" : Sleep(100)
        lblZufallsbuchstabe.Text = "T" : Sleep(100)
        lblZufallsbuchstabe.Text = "U" : Sleep(100)
        lblZufallsbuchstabe.Text = "V" : Sleep(100)
        lblZufallsbuchstabe.Text = "W" : Sleep(100)
        lblZufallsbuchstabe.Text = "X" : Sleep(100)
        lblZufallsbuchstabe.Text = "Y" : Sleep(100)
        lblZufallsbuchstabe.Text = "Z" : Sleep(100)
            
    Loop

End Sub

Sub btnStopp_Click

    Stopp = True
    Msgbox("stopp", lblZufallsbuchstabe.Text)
    
End Sub

Hier auch ein Gif zur besseren Visualisierung des Problems:
https://www.screencast.com/t/bMklsriOZPQE
 

JOTHA

Well-Known Member
Licensed User
Longtime User
... versuche das mal ...
B4X:
Sub btnStopp_Click

    Stopp = True
    Msgbox("stopp", lblZufallsbuchstabe.Text)
    Return
    
End Sub
 

DonManfred

Expert
Licensed User
Longtime User
Informiere dich über Resumeable subs und wie man hier Events realisieren kann.
Sleep löst ein return in der nutzenden sub aus.
 

DonManfred

Expert
Licensed User
Longtime User
ungetestet aber ich denke so müsste es gehen

B4X:
Sub btnStart_Click

    Stopp=False
    
    Do While True

        If Stopp=True Then Exit
        Sleep(0)
        
        lblZufallsbuchstabe.Text = "A" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "B" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "C" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "D" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "E" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "F" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "G" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "H" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "I" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "J" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "K" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "L" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "M" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "N" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "O" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "P" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "Q" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "R" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "S" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "T" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "U" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "V" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "W" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "X" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "Y" : Sleep(100)
        If Stopp=True Then Exit
        lblZufallsbuchstabe.Text = "Z" : Sleep(100)
        If Stopp=True Then Exit            
    Loop

End Sub
 

OliverA

Expert
Licensed User
Longtime User
Alternative schleife. Auch viel übersichtlicher
++
In dieser Schleife sollen die Buchstaben von A-Z sich immer wiederholend durchlaufen

B4X:
Sub btnStart_Click
    Dim i As Int = 64
    Do While Not(Stopp)
        i = i + 1
        if i > 90 then i = 65
        lblZufallsbuchstabe.Text = Chr(i)
        Sleep(100)
     Loop
End Sub
 
Top