If Schleife - (Sprung funktion wie goto bei batch)

  • Servus Leute,

    ich möchte bei der else anweisung wenn möglich wieder auf den Anfang der If springen sodass wenn ich auf nein klicke immerwieder die selbe frage erschein bis man auf ja klickt, wie mache ich das?


    und gleich noch eine Frage wie bekomme ich eine MsgBox ohne einen Button hin welcher sich automatsch nach einer bestimmten Zeit schliest danke ;)..!

    Grüße Danke für die Hilfe!


    [autoit]

    $p3=MsgBox(4, "Position 2 Prüfen", "Gewicht auf Pos.3?")
    if $p3 = "6" Then
    ....
    Else
    ....
    EndIf

    [/autoit]
  • [autoit]

    Func meinefunc()
    $p3=MsgBox(4, "Position 2 Prüfen", "Gewicht auf Pos.3?")
    if $p3 = "6" Then
    ;~ ....
    Else
    ;~ ....
    meinefunc()
    EndIf
    EndFunc

    [/autoit]

    Es gibt keine MsgBox ohne Button, außer du erstellst eine kleine GUI. Schau dir mal den Parameter "timeout" an.

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • cartan... geht nicht?

    Einmal editiert, zuletzt von GFXShorty (2. Februar 2010 um 14:51)

  • Also die Möglichkeit mit der rekursiven Funktion finde ich schon arg umständlich für diesen Fall.
    Dafür gibts Schleifen - warum also nicht nehmen?

    Hab dir mal daher paar Beispiele gemacht wie du auf verschiedene Art und Weise mit Schleifen deinen Fall angehen kannst:

    Spoiler anzeigen
    [autoit]

    ;While-WEnd Schleife:
    While MsgBox(4, "Position 2 Prüfen", "Gewicht auf Pos.3?") <> 6

    [/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    ;While-WEnd EndlosSchleife:
    While True
    If MsgBox(4, "Position 2 Prüfen", "Gewicht auf Pos.3?") = 6 Then ExitLoop
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    ;Do-Until Schleife:
    Do

    [/autoit] [autoit][/autoit] [autoit]

    Until MsgBox(4, "Position 2 Prüfen", "Gewicht auf Pos.3?") = 6

    [/autoit] [autoit][/autoit] [autoit]

    ;Do-Until EndlosSchleife:
    Do
    If MsgBox(4, "Position 2 Prüfen", "Gewicht auf Pos.3?") = 6 Then ExitLoop
    Until False

    [/autoit] [autoit][/autoit] [autoit]

    ;For-Endlosschleife
    For $i=1 To 2 Step 2
    If MsgBox(4, "Position 2 Prüfen", "Gewicht auf Pos.3?") = 6 Then ExitLoop
    Next

    [/autoit]

    Was das Textinfo-Fenster angeht entweder, wie bereits gesagt, eine eigene GUI oder halt mal SplashtextOn ansehen.

  • Goto ist böse. Und nichts was man mit Goto machen kann, kann man mit dem schlauen einsatz von funktionen uund schleifen nicht auch.

    Wenn du aber unbedingt wirrren und unverständlichen Code (Dank GoTo) haben willst, dann kannst du Sprungmarken Simulieren

    [autoit]

    $Sprungmarke = True
    $ZweiteSprungmarke = True

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0, "", "Hier sind wir vorbei")
    While $Sprungmarke ; Sprungmarke initialisieren
    If MsgBox(4, "", "Zurückspringen? (Mit Ja zurückspringen)") = 6 Then ContinueLoop
    If MsgBox(4, "", "Bist du sicher? (Mit Nein zurückspringen)") = 7 Then ContinueLoop
    While $ZweiteSprungmarke
    MsgBox(0, "", "Wir haben die zweite Sprungmarke erreicht")
    If MsgBox(1, "", "Es wird jetzt zu der ersten Sprungmarke gesprungen (Mit Ok zurückspringen)") = 1 Then ContinueLoop 2
    If MsgBox(1, "", "Dann wengistens zu der zweiten? (Mit Ok zurückspringen)") = 1 Then ContinueLoop

    [/autoit][autoit][/autoit][autoit]

    $ZweiteSprungmarke = False
    WEnd
    $Sprungmarke = False ; Endlosschleife verhindern (Danach muss direkt das Wend folgen)
    WEnd ; ab hier kannn man nicht mehr zurückspringen

    [/autoit]
  • Hi,

    die Schleife wird nicht neu gestartet.
    ContinueLoop bedeutet, dass er sofort wieder zum Anfang der Schleife springt ohne die noch folgenden Anweisungen abzuarbeiten.

    ;-))
    Stefan

    Bsp.:

    [autoit]


    For $i = 1 to 200
    If Mod ($i, 2) = 0 Then ContinueLoop
    ConsoleWrite ($i & @CRLF)
    Next

    [/autoit]