Mehrere Befehle mit Timer steuern?

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von fraju.

    Mehrere Befehle mit Timer steuern?

    HEY! Habe diesen Code:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Timer1.Interval = 1000
    3. End Sub
    4. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Bei einem Klick auf Button1 wird der Timer gestartet'
    5. Timer1.Start()
    6. End Sub
    7. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    8. If ProgressBar1.Value = 100 Then
    9. 'Handlung'
    10. Timer1.Stop()
    11. Else
    12. ProgressBar1.Value = ProgressBar1.Value + 10
    13. End If
    14. End Sub


    Eigentlich alles logisch... Allerdings habe ich 5 Befehle die mit diesen Timer zu steuern!
    Also müsste der Code So lauten:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Timer1.Interval = 1000
    3. End Sub
    4. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Bei einem Klick auf Button1 wird der Timer gestartet'
    5. Timer1.Start()
    6. End Sub
    7. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    8. If ProgressBar1.Value = 100 Then
    9. 'Handlung'
    10. Timer1.Stop()
    11. Else
    12. ProgressBar1.Value = ProgressBar1.Value + 10
    13. End If
    14. If ProgressBar1.Value = 80 Then
    15. 'Handlung'
    16. Else
    17. ProgressBar1.Value = ProgressBar1.Value + 10
    18. End If
    19. End Sub


    Und so weiter...
    Das ganze geht aber nicht!
    Wo ist der vdmte Fehler?
    "Geht nicht" ist keine Fehlermeldung. Bei dir wird, sofern der Wert weder 100 noch 50 usw. ist, bei JEDER Abfrage der Else-Zweig ausgeführt.
    Ich empfehle dir mal die Select Case-Anweisung

    VB.NET-Quellcode

    1. Select Case Wert
    2. Case 1
    3. 'mach das
    4. Case 20
    5. 'mach das
    6. Case 40 to 60
    7. 'mach das, wenn der Wert zwischen 40 und 60 ist
    8. Case 80
    9. 'mach das
    10. Case else
    11. 'mach das, wenn keine der oberen Bedigungen zutrifft
    12. End Select

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. Timer1.Interval = 1000
    4. End Sub
    5. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Bei einem Klick auf Button1 wird der Timer gestartet'
    6. Timer1.Start()
    7. End Sub
    8. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    9. If ProgressBar1.Value = 100 Then
    10. Label1.Text = "Hallo"
    11. Timer1.Stop()
    12. Else
    13. ProgressBar1.Value = ProgressBar1.Value + 10
    14. End If
    15. If ProgressBar1.Value = 50 Then
    16. Label2.Text = "Hallo"
    17. Else
    18. ProgressBar1.Value = ProgressBar1.Value + 10
    19. End If
    20. End Sub
    21. End Class


    Der Befehl der Label1 betrifft wird noch ausgeführt, aber beim zweiten erscheint im Direktfenster diese Meldung:
    Eine Ausnahme (erste Chance) des Typs "System.ArgumentOutOfRangeException" ist in System.Windows.Forms.dll aufgetreten.

    Und ProgressBar1.Value = ProgressBar1.Value + 10 vom zweiten If-Bereich wird gelb markiert

    Also... was ist los?

    der_Kurt schrieb:

    Bei dir wird, sofern der Wert weder 100 noch 50 usw. ist, bei JEDER Abfrage der Else-Zweig ausgeführt.

    Wenn du den If-Else-Zweig wirklich fünfmal hast, wird, wenn der Wert nicht getroffen wird, die Progressbar fünfmal um 10 erhöht.
    Außerdem: wenn du mit der Increment-Methode der Progressbar arbeitest, wird das Maximum NICHT überschritten.
    was los ist?

    Liest du die Posts nicht? Steht eigentlich ja eh schon da, oder?
    Du pulverst die Progressbar über den Maximumwert! Die Increment-Methode macht das nicht.

    VB.NET-Quellcode

    1. Select Case Wert
    2. Case 50
    3. Meldung = "die Hälfte"
    4. Case 75
    5. Meldung = "drei Viertel"
    6. 'mach das
    7. Case >80
    8. Meldung = "fast fertig"
    9. Case 100
    10. Meldung = "Fertig!"
    11. Timer1.Stop
    12. Case else
    13. End Select
    14. LblStatus.Text = Meldung

    Wo du die Progressbar erhöhst, bleibt dir überlassen:

    VB.NET-Quellcode

    1. Progressbar1.increment (10)
    Ich dachte hier würde einem wirklich geholfen werden... Stattdessen bekommt man hier Meldungen wie: "Er hat dir doch eh schon geholfen" oder "Du must es nur noch verstehen!"
    Na super! Wie soll man etwas lernen wenn jede Hilfe die man Anbietet auf einem vollkommen (für Anfänger verwirrendes) Posting basiert?
    Ihr seid auch nicht besser nur weil unter eurem Usernamen Guru oder Super Moderator steht.
    Ihr habt alle mal so angefangen wie ich
    Hallo
    auf deine Art

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. Timer1.Interval = 1000
    4. 'progressbar auf 0
    5. End Sub
    6. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Bei einem Klick auf Button1 wird der Timer gestartet'
    7. Timer1.Start()
    8. End Sub
    9. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    10. If ProgressBar1.Value = 100 Then
    11. Label1.Text = "Hallo"
    12. Timer1.Stop()
    13. End If
    14. If ProgressBar1.Value = 50 Then
    15. Label2.Text = "50"
    16. End If
    17. If ProgressBar1.Value = 60 Then
    18. Label2.Text = "80"
    19. End If
    20. If ProgressBar1.Value = 70 Then
    21. Label2.Text = "70"
    22. End If
    23. ProgressBar1.Value = ProgressBar1.Value + 10
    24. End Sub
    25. End Class
    Seht ihr?

    Fraju hat mir weitergeholfen...
    Hab aber nen Fehler gefunden
    Mein Code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Timer1.Start()
    4. End Sub
    5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6. Timer1.Interval = 1000
    7. End Sub
    8. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    9. If ProgressBar1.Value = 20 Then
    10. Label1.Text = "20"
    11. End If
    12. If ProgressBar1.Value = 40 Then
    13. Label2.Text = "40"
    14. End If
    15. If ProgressBar1.Value = 60 Then
    16. Label3.Text = "60"
    17. End If
    18. If ProgressBar1.Value = 80 Then
    19. Label4.Text = "80"
    20. End If
    21. If ProgressBar1.Value = 100 Then
    22. Label5.Text = "100"
    23. Timer1.Stop()
    24. [b]ProgressBar1.Value = ProgressBar1.Value - 10[/b]
    25. End If
    26. ProgressBar1.Value = ProgressBar1.Value + 10
    27. End Sub
    28. End Class


    Musste beim letzten If-Bereich noch etwas einfügen (siehe Fett gedruckter Bereich) sonst kommt wieder diese dämliche Fehlermeldung.