Timer - Progress Problem

  • VB.NET

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

    Timer - Progress Problem

    Hi @all

    Ich habe mal ein problem mit einem button und einer progessbar, welcher durch einen timer gestartet wird

    ablauf:
    butten disablen
    timer starten
    progress durchlaufen
    button enablen

    Hier mein versuch

    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. Button1.Enabled = False
    4. Timer1.Start()
    5. If ProgressBar1.Value = 100 Then
    6. Timer1.Stop()
    7. End If
    8. If ProgressBar1.Value = 100 Then
    9. Button1.Enabled = True
    10. End If
    11. End Sub
    12. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    13. ProgressBar1.Value = Timer1.Interval()
    14. End Sub
    15. End Class


    Leider wird der letzte versuch nicht gemacht
    bitte um hilfe
    Also zunächst ma: DasHier sollte erstma deine Bibel sein... :D
    Aber zur Erklärung, warum das nicht funktionieren kann:
    Das Load-Event der Form wird, wie der Name sagt, beim Laden des Formulars einmalig ausgeführt, während das Tick-Event des Timers immer wieder nach Ablauf des Teimerintervals aufgerufen wird.
    Das Interval mußt du also vor dem Starten des Timers festlegen (in ms).
    Die Abfrage, ob deine Progressbar gefüllt ist, kommt im Load-Event nicht mehr zum Zuge, da diese Sub schneller als dein Interval sein dürfte. Diese Abfrage gehört ins Tick-Event des Timers, da du ja dort auch den Wert der Progressbar erhöhen musst. Dazu gibt es die wunderschöne Methode Increment der Progressbar. Da wird auch ein Überlauf des Max-Wertes unterbunden.
    Ich denke diese Infos sollten dir erstma weiterhelfen...
    Fiel Fergnügen
    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Danke schonmal

    Aber jeztzt stoße ich auf das problem, dass der button schon vor dem Progressbar1.Value = 100 aktiviert wird

    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. Button1.Enabled = False
    4. Timer1.Start()
    5. End Sub
    6. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    7. ProgressBar1.Value = Timer1.Interval()
    8. If ProgressBar1.Value = 100 Then
    9. Button1.Enabled = True
    10. Timer1.Stop()
    11. End If
    12. End Sub
    13. End Class


    vlt jemand eine idee
    Im Timer Tick Event einen Zähler einbauen, also eine Variable die z.B. um 1 erhöht wird.

    VB.NET-Quellcode

    1. Dim meineVar As Integer
    2. meineVar += 1


    Dann einfach diesen Wert der Value Property zuweisen.

    LG
    @Visual Simon,
    hast du meinen Post überhaupt gelesen? War wohl zu viel Text....
    Nutze statt Progressbar.Value=XYZ lieber Progressbar.Increment(XYZ). Vergleiche außerdem If Progressbar.Value = Progressbar.Maximum...
    Das ist aus 2 Gründen sicherrer:
    1. Sollte dein Progressbar Value z.B. von 98 um 3 erhöht werden und überschreitet dadurch das Maximum, gibt es eine Ausnahme. Mit Increment passiert das nicht.
    2. Wenn du später mal den Maxwert der PB änderst, kannst du das im Designer tun und mußt nich im Programm rumwurschteln.
    Das heißt, du solltest immer so zu programmieren versuchen, dass spätere Änderungen möglichst wenig Probleme bereiten.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup: