Timer Steuert Schleife - nur wie?

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Vatter.

    Timer Steuert Schleife - nur wie?

    Hallo zusammen,
    Ich bin grad dabei ein kleines Spielchen zu erstellen,
    bei dem immer durch Zufall einer von vier Button für eine kurze, festlegbare Zeit (100 bis 1000 ms)
    entsperrt wird, bei einem Klick gibts einen Punkt.
    Ich habe, um diese Zeitspanne zu realisieren, einen Timer "Intervalgeber" eingebaut.
    Innerhalb der Intervalgeber_Tick -Prozedur ist nun eine
    For - Next - Schleife, die je nach gewählter Rundenanzahl unterschiedlich oft durchlaufen soll.
    Aber leider - und natürlich :D - startet die Schleife bei jedem "Tick" erneut.
    Wie kann ich das anders Regeln?

    Anbei mal der (bisherige :!: ) ganze Quelltext.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub nudSpeed_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nudSpeed.ValueChanged
    3. Dim Speed As Decimal = nudSpeed.Value
    4. End Sub
    5. Private Sub nudRunden_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nudRunden.ValueChanged
    6. Dim Runden As Decimal = nudRunden.Value
    7. End Sub
    8. Private Sub bnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnStart.Click
    9. bnStart.Enabled = False
    10. bnStop.Enabled = True
    11. Intervalgeber.Start()
    12. Intervalgeber.Interval = nudSpeed.Value * 1000
    13. nudRunden.Enabled = False
    14. nudSpeed.Enabled = False
    15. End Sub
    16. Private Sub Intervalgeber_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Intervalgeber.Tick
    17. For z As Short = 1 To nudRunden.Value
    18. bnKlickMe1.Enabled = False
    19. bnKlickMe2.Enabled = False
    20. bnKlickMe3.Enabled = False
    21. bnKlickMe4.Enabled = False
    22. Dim R As New Random(Now.Millisecond)
    23. Dim Zufall As Short = R.Next(1, 5)
    24. If Zufall = 1 Then
    25. bnKlickMe1.Enabled = True
    26. ElseIf Zufall = 2 Then
    27. bnKlickMe2.Enabled = True
    28. ElseIf Zufall = 3 Then
    29. bnKlickMe3.Enabled = True
    30. Else
    31. bnKlickMe4.Enabled = True
    32. End If
    33. Next
    34. End Sub
    35. Private Sub bnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnStop.Click
    36. bnStop.Enabled = False
    37. bnStart.Enabled = True
    38. Intervalgeber.Stop()
    39. bnKlickMe1.Enabled = False
    40. bnKlickMe2.Enabled = False
    41. bnKlickMe3.Enabled = False
    42. bnKlickMe4.Enabled = False
    43. nudRunden.Enabled = True
    44. nudSpeed.Enabled = True
    45. End Sub
    46. End Class


    Vielen Dank schon mal im voraus,
    Paulchenchen
    In einer Schleife kannst du nichts für 0,7 Sekunden entsperren.
    Auch dafür benötigst du einen Timer, und sinnreichen Code, der nach 0,7s die nächste Aktion durchführt. du mußt glaub den Unterschied von prozeduralem und eventorientierten Denken schnackeln, und erfassen, welches Denken für welche Anforderung das angemessene ist.
    gugge auch Alles über Events
    ISt es vllt. dies, was Du meinst:

    VB.NET-Quellcode

    1. Private R As New Random()
    2. Private Sub Intervalgeber_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Intervalgeber.Tick
    3. Dim btn() As Button = {bnKlickMe1, bnKlickMe2, bnKlickMe3, bnKlickMe4}
    4. For Each bb As Button In btn
    5. bb.Enabled = False
    6. Next
    7. btn(R.Next(0, 4)).Enabled = True
    8. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vorschlag:
    1. For-Schleife entsorgen
    2. global Variable Rundenanzahl deklarieren
    3. Im Button Start die Rundenvariable auf einen gewünschten Wert setzen und Timer.Start
    4. In Tick-Event Rundenvariable -=1
    5. Test, ob Rundenvariable = 0, dann Timer Stop
    6. Feddich

    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup: