Prozentrechnen in verbindung mit progressbar

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von xXAlphaXx.

    Prozentrechnen in verbindung mit progressbar

    Hallo,

    Ich versuche zwei sehr große variablen zahlen mit einer progressbar anzuzeigen doch es klappt nicht. Da ich die zahl selbst nicht als value und maximum für die progressbar verwenden kann (weil sie zu lang ist) macht es sehr schwierig für mich.

    Also habe ich gedacht ich rechne es in % um und nehme diesen wert dann als value und maximum etc.

    Hier ist was ich habe:

    VB.NET-Quellcode

    1. dim prozent as long = (variablevalue / variablesmaximum * 100)
    2. progbar.maximum=100
    3. progbar.value = prozent


    Die variablevalue verändert sich die ganze zeit (wird größer).

    Das in einem timer aber die progressbar bewegt sich nicht.

    Ich seh nur noch schwarz, wäre toll wenn mir da jemand helfen könnte.

    EDIT//

    Nochmal zur verdeutlichung, die value und maximum sind zu groß für die progressbar. Das ist mein problem.

    grüße
    ?(

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Fräulein“ ()


    Das in einem timer aber die progressbar bewegt sich nicht.


    Du setzt den Value der ProgressBar im Timer mit dem aktuellen "Porzent"-Wert dann auch neu, richtig?

    Nochmal zur verdeutlichung, die value und maximum sind zu groß für die progressbar. Das ist mein problem.


    Einfach linear runterbrechen z.B. mit Division durch 1.000.000 oder so?

    Gruß

    Rainer

    Fräulein schrieb:

    Hallo,
    Hier ist was ich habe:

    VB.NET-Quellcode

    1. dim prozent as long = (variablevalue / variablesmaximum * 100)
    2. progbar.maximum=100
    3. progbar.value = prozent

    (


    VB.NET-Quellcode

    1. Dim Prozentmaximum, Va, Vb, Prozent As Double
    2. Prozentmaximum = 100
    3. Va = ' Eingelesenes
    4. Vb = ' Eingelesenes
    5. progbar.maximum = Prozentmaximum ' Einzelne Deklaration reicht dann
    6. Prozent = Va/Vb * 100 'Normale Prozentrechnung
    7. ' Prüfung ob Wert kleiner gleich 100 ist. Wenn ja dann Soll er es anzeigen, wenn nein dann MsgBox (MessageBox) mit nachricht
    8. If Prozent <=100 then
    9. probar.value = Prozent
    10. Else
    11. MsgBox ("Prozentangabe ist über 100%")
    12. End If


    Das müsste es sein

    Da gibts noch kleine Feinheiten wegen Englischem und deutschem Komma aber so sollte es im Prinzip gehen
    Einfach linear runterbrechen z.B. mit Division durch 1.000.000 oder so?


    Nein da die zahl eben sehr sehr groß sein kann aber eben auch nur 1.


    @Alpha, habe deinen code verwendet und angepasst doch die progressbar tut sich nicht. Ich kann mir absolut nicht vorstellen was es ist. Der wert erhöht sich aber die progressbar zeigt den fortschritt einfach nicht an. irgentwas an der rechnung falsch?

    Der eine variable wert ist das maximum (dieser verändert sich nicht mehr während der process läuft)
    Der andere variable wert ist die value (dieser wert steigert sich)
    So ich schreibe es nomma selber in VB um das eben zu checken ;)
    vllt. muss ich noch was nachrichten

    bei
    Va und Vb hast du z.B. TextBox verwendet?


    Edit:// Bei mir Funktioniert der Code Einwandfrei
    Welches Event verwendest du für die Berechnung? Button_Click?
    Heißen deine Controls so wie die im Code?
    Va und Vb Wert zugewiesen? z.B. TextBox1.Text und TextBox2.Text (würde noch Konvertieren lassen ist aber erstmal nebensache da VB das tolleriert)


    Try Catch für Buchstabeneingabe kann man auch noch hinzufügen

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

    Wenn ich den normalen wert ohne umrechnung visuell per label darstelle und es ohne progressbar anzeige funktioniert es ohne probleme. Aber sobald man die progressbar verwenden will und es umrechnen muss geht irgentwas schief.

    Wieso kann die progressbar nicht mit großen zahlen umgehn? so viel ärger wegen einer so kleinen sache....

    Folgendes ist im timer:

    Dim Prozentmaximum, Va, Vb, Prozent As Double
    Prozentmaximum = 100

    Va = gelesenes ' steigert sich
    Vb = vorhandenes ' maximum

    Progbar.Maximum = Prozentmaximum ' Einzelne Deklaration reicht dann
    Prozent = Va / Vb * 100 'Normale Prozentrechnung

    ' Prüfung ob Wert kleiner gleich 100 ist. Wenn ja dann Soll er es anzeigen, wenn nein dann MsgBox (MessageBox) mit nachricht
    If Prozent <= 100 Then
    Progbar.Value = Prozent
    Else
    MsgBox("Prozentangabe ist über 100%")
    progcheck.Stop()
    End If


    "gelesenes" verändert sich in einem loop eines anderen threads, deshalb wird es per timer abgefragt weil es sonst zu schnell abgefragt werden würde und es das programm verlangsamt. Wie auch immer wenn ich es ohne progressbar und umrechnung darstelle geht es.

    Also wo liegt der fehler? ( haare rauf)
    hmm dann liegt es nur an der If-Abfrage

    bekommst du eine Fehlermeldung oder wie?
    Wenn sich Va jedesmal steigert (innerhalb einer bestimmten Zeit z.B.) Ist es ja klar das dann eig die MsgBox irgendwann auftaucht.

    Sobald Va > Vb heißts MsgBox () [Else flucht]


    Oder es liegt an der Namensgebung.
    (ProBar hat ja einen Maximumwert den man selbst vorher einstellt der darf nicht überschritten werden deswegen benutze ich Else als Escape)
    Zeig doch mal den ganzen Code ... vor allem den Teil wo Du den Timer-Intervall setzt, den Timer startest und den Teil wo der ProgressBar.Value gesetzt wird. Bitte inklusive aller Deklarationen.

    Vermute das irgendwo da ein kleiner Fehler steckt.

    Gruß

    Rainer

    xXAlphaXx schrieb:

    Könnte sein das die Variable lokal bei ihr eingetragen ist statt global :P


    Wenn dies so wäre, wieso kann ich dann ohne progressbar sie anzeigen lassen?

    Nein ich bekomme kein fehler, der eigentliche wert steigt, aber die value der progressbar nicht. Und eigentlich wird ja die value auf den fortschritt des wertes abgeglichen mit jedem tick.

    Zeig doch mal den ganzen Code


    Das ist doch der ganze code, wie sich der wert an sich verändert is doch unnötig zu wissen da ja ohne progressbar es sich auch abfragen lässt. Es liegt an der umrechnung die nicht funktionieren will. Timer intervall ist in den eigenschaften festgelegt.

    Aber hier nochmal mit deklaration:

    VB.NET-Quellcode

    1. dim vorhandenes as double
    2. dim gelesenes
    3. Dim Prozentmaximum, Va, Vb, Prozent As Double
    4. Prozentmaximum = 100
    5. Va = gelesenes ' steigert sich
    6. Vb = vorhandenes ' maximum
    7. Progbar.Maximum = Prozentmaximum ' Einzelne Deklaration reicht dann
    8. Prozent = Va / Vb * 100 'Normale Prozentrechnung
    9. ' Prüfung ob Wert kleiner gleich 100 ist. Wenn ja dann Soll er es anzeigen, wenn nein dann MsgBox (MessageBox) mit nachricht
    10. If Prozent <= 100 Then
    11. Progbar.Value = Prozent
    12. Else
    13. MsgBox("Prozentangabe ist über 100%")
    14. progcheck.Stop()
    15. End If


    tick tick tick läuft er im hintergrund und sollte alle 250ms die value mit dem forschritt des wertes abgleichen (tut er auch ohne progressbar und umrechnung ohne probleme). Aber sobald eine umrechnung für die progressbar dazwischen ist, passiert einfach nichts.

    VB.NET-Quellcode

    1. Prozent = Va / Vb * 100 ' neuen wert umrechnen
    2. Progbar.Value = Prozent ' und anzeigen


    Hier sollte der fortschritt gemacht werden.

    frustrierend :D
    Wie gesagt in einem anderen thread. Aber dieser ist ja unbedeutend, wichtig ist ja nur das die information abgefragt werden kann. Und das kann sie wie schon erwähnt. Wenn ich ein label mache und durch den timer den wert aktualisieren lasse, tut er das. Doch der wert ist sehr sehr lange und damit kann eben die progressbar nichts anfangen und deswegen die ganze umrechnerei. Und da geht was schief.

    "gelesenes" steigert sich und der timer soll den fortschritt auf der progressbar wiederspiegeln.

    EDIT//
    fehler gefunden(oder fast)
    Also "Prozent" wie oben im code zeigt an 0,0538756348756348756..etc wenn er 50% anzeigen sollte. Also wie ich sagte etwas stimmt an der rechnung nicht, weis nur noch nicht was....

    EDIT2//
    Okay fataaaaaler rechen fehler. Es hat sich herausgestellt das meine deklarationen schon in einem anderen thread verrechnet werden, und im timer dann quasi doppelt.

    Danke euch allen, gelöst!

    :thumbup:

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Fräulein“ ()