Synchrone Bewegung zwischen label und Progressbar Value

  • VB.NET

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

    Synchrone Bewegung zwischen label und Progressbar Value

    Hey Leute,
    hab mal wieder eine Frage, also hier das Problem:
    Ich möchte von meiner DropBox mithilfe von der DownloadFileAsync Methode eine Datei runterladen, das klappt auch soweit, im Sub DownloadProgressChanged bekomme ich den Fortschritt auch richtig mitgeteilt und er wird auch richtig in der Progressbar (Progressbar1) angezeigt. Nun möchte ich jedoch einen Seperator (Seperator1) (aus der MetroSuite von Gather) und ein label (label6) mit dem Fortschritt der Progressbar mitlaufen lassen. Am Anfang laüft der Seperator und das Label Synchron mit, doch ab ca 20% Value in der Progressbar wird der Fortschritt asynchron zu der Bewegung des Seperator und des Labels. Auf dem Bild im Anhang sieht man deutlich das die Bewegung nicht Synchron ist. Ich kann mir nicht erklären warum es nicht funktioniert. Das Maximum der Progressbar beträgt 100, Die Variable SeplocX soll für die X-Position des Seperators stehen und die Variable lbl6locX für die X-Position des Labels.

    Hier mein Code:


    VB.NET-Quellcode

    1. Private Sub wc_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles wc.DownloadProgressChanged
    2. Me.ProgressBar1.Value = e.ProgressPercentage
    3. Me.Label6.Text = e.ProgressPercentage & "%"
    4. Dim SeplocX As Long = 0
    5. Dim lbl6locX As Long = 0
    6. Dim Calc As Long = ProgressBar1.Width
    7. Calc = Calc / ProgressBar1.Maximum
    8. Calc = Calc * ProgressBar1.Value
    9. SeplocX = Calc
    10. lbl6locX = Calc
    11. If (e.ProgressPercentage > 50) Then
    12. lbl6locX = lbl6locX - Label6.Width
    13. End If
    14. Me.Separator1.Location = New Point(SeplocX, Me.Separator1.Location.Y)
    15. Me.Label6.Location = New Point(lbl6locX, Me.Label6.Location.Y)
    16. End Sub


    Danke im Voraus :)

    Edit by ~blaze~:
    *Schrifftgröße normalisiert*
    Bilder
    • VBFehlerBild.jpg

      307,55 kB, 464×966, 308 mal angesehen

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

    1. Option Strict on

    2. Es gibt rundungsfehler. Hier Calc = Calc / ProgressBar1.Maximum kommt eine Double zahl heraus, wenn diese nun z.b 0,88 ist, wird diese auf 1 aufgerunden und folglich hier Calc = Calc * ProgressBar1.Value falsch berechnet

    Edit: Benutze also zuerst double, und runde erst ganz am Schluss
    Mit freundlichen Grüßen



    GVI (Teil1/2): 80%

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

    Danke, jetzt funktioniert es problemlos :). Ich hab den Code jetzt nach deinem Option Strict Rat umgebaut, aber warum soll ich Option Strict benutzen ? Es funktioniert doch auch ohne problemlos ;)

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

    Ja, aber ds ist dein Code schei*e :D

    Es geht im Prizip darum das Framework bzw. OOP richtig zu nutzen, und wenn du einem String einen Integer bspw. zuweißt ohne Konvertierung, dann widerspricht das schlicht und einfach allen 'Regeln' der OOP :)
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Warum Option Strict on xD Weil du ohne Strict on doppeldeutig mit dem Computer sprichst. Wenn er nicht weiß ob ein "Stock" Lebewesen oder Gegenstand ist, dann darf er zur Laufzeit entscheiden, ob das Ding bei der Aussage "Der Stock bricht" kotzt oder nur einen Knacks bekommt. Ohne Option Stict On kann man nicht anständig programmieren. Mehr braucht man dazu nicht zu sagen.