Problem mit Progressbar

  • VB.NET

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

    Problem mit Progressbar

    Hallo Leute

    Ich habe ein Problem mit meiner Progressbar.

    Das ist mein Code:

    Nicht wundern

    Code vom Timer1

    VB.NET-Quellcode

    1. timeleft2 = timeleft2 + 1
    2. ProgressBar1.Value = timeleft2
    3. If timeleft2 = 0 Then
    4. ProgressBar1.Value = 0
    5. Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments).ToString & "\PC Down\down.bat")
    6. Button2.Visible = False
    7. Button1.Visible = True
    8. NumericUpDown1.Enabled = True
    9. CheckBox1.Enabled = True
    10. Timer1.Stop()
    11. End If


    Das Problem ist nun, das wenn die Progressbar Voll ist, kommt ein Fehler:


    Der Wert 6 ist für Value ungültig. Value sollte zwischen 'minimum' und 'maximum' liegen. Parametername: Value


    Info: Der Wert bei der Fehlermeldung ist unterschiedlich.

    Je nach Zahl der NumericUpDown

    Edit by der_Kurt:
    Rot ist den Mods vorbehalten
    * Beitrag editiert *

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „der_Kurt“ ()

    Immer wenn du ProgressBar ein neues Value zuweist, musst du überprüfen ob der neue Wert größer ist als MaxValue ;)
    Um das in Code umzusetzen:

    VB.NET-Quellcode

    1. Dim newValue As Integer = 4
    2. If (Not newValue > ProgressBar.MaxValue) Then ProgressBar.Value = newValue
    und wo muss ich den code einfügen?

    So hab ich es schon versucht:

    VB.NET-Quellcode

    1. timeleft2 = timeleft2 + 1
    2. Dim newValue As Integer = 4
    3. If (Not newValue > ProgressBar.MaxValue) Then ProgressBar.Value = newValue
    4. If timeleft2 = 0 Then
    5. ProgressBar1.Value = 0
    6. Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments).ToString & "\PC Down\down.bat")
    7. Button2.Visible = False
    8. Button1.Visible = True
    9. NumericUpDown1.Enabled = True
    10. CheckBox1.Enabled = True
    11. Timer1.Stop()
    12. End If
    Schau dir auch ma die Progressbar.Increment(Integer)-Methode an. Die erhöht um den angegebenen Wert, ohne einen Überlauf des Max-Wertes zu verursachen.
    Außerdem gehört das Incrementieren an das Ende deines Codes, da deine Bedingung If timeleft2 = 0 Then sonst nie war wird durch timeleft2 = timeleft2 + 1.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    ich hab das jetzt mal so umgeschrieben:

    VB.NET-Quellcode

    1. If ProgressBar1.Value < ProgressBar1.Maximum Then
    2. ProgressBar1.Value = timeleft2
    3. End If


    Doch dann kommt der gleiche fehler wie am anfang.

    Hier mal der code vom Button:

    VB.NET-Quellcode

    1. Dim number = NumericUpDown1.Value
    2. Timer1.Interval = 1000
    3. timeleft2 = number
    4. ProgressBar1.Maximum = number
    5. Timer1.Start()
    Es muss so heißen:

    VB.NET-Quellcode

    1. If ProgressBar1.Value + timeleft2 < ProgressBar1.Maximum Then...

    EDIT:// Sorry, ich sehe, dass timeleft gar nicht hinzuaddiert.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „TheoTechnic“ ()

    Schreib ma folgendes in deine Sub:

    VB.NET-Quellcode

    1. If Progresbar1.value= 0 Then...
    2. ...'der sonstige Schnatter
    3. Progresbar1.Increment(timeleft2)

    statt:

    VB.NET-Quellcode

    1. timeleft2 = timeleft2 + 1
    2. ProgressBar1.Value = timeleft2

    Nun wird deine Progressbar.Value bei jedem Durchlauf um timeleft2 erhöht ohne den Max-wert zu überschreiten. Du brauchst nix prüfen auf Überlauf. 8-)
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Ich kann dein Problem nicht erkennen. Ich denke dass deine variable timeleft2 einen zu hohen Wert hat oder du die Progressbar nicht auf 0 setzt. Hier mal C&P zum Testen:

    VB.NET-Quellcode

    1. Private WithEvents T As New Timer
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. T.Interval = 500
    4. T.Start()
    5. ProgressBar1.Value = 1
    6. End Sub
    7. Private Sub T_Tick() Handles T.Tick
    8. ProgressBar1.Increment(16) 'Das hier läuft problemlos
    9. 'ProgressBar1.Value += 16 'Diese Zeile bringt eine Fehlermeldung
    10. Button1.Text = ProgressBar1.Value
    11. If ProgressBar1.Value = ProgressBar1.Maximum Then
    12. ProgressBar1.Value = 0
    13. T.Stop()
    14. End If
    15. End Sub
    Die Progressbar ist einfach von 0-100 eingestellt. Wenn du statt Increment die auskommentierte Zeile nutzt, hast du wieder Fehler. Im Button kannst du den Zähler beobachten.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    aber wie bauch ich jetzt mein NumericUpDown dort mit ein?

    Also getestet hab ich das jetzt mal so mit dem code und es geht, aber wenn ich das so bearbeite,
    das es mit NumericUpDown laufen soll, klappt das alles wieder nicht.

    Ich muss mit dem NumericUpDown ja die maximale größe der Progressbar einstellen,
    das sol sozu sagen wie ein countdown werden, nur in einer Progressbar.
    Na ganz einfach:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. T.Interval = 500
    3. T.Start()
    4. ProgressBar1.Value = 0
    5. ProgressBar1.Maximum = CInt(NumericUpDown1.Value)
    6. End Sub
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup: