Progressbar

  • VB.NET

Es gibt 46 Antworten in diesem Thema. Der letzte Beitrag () ist von UFO.

    Progressbar

    Hallo zusammen

    Ich hab 2 Buttons. Der erste (Start-Button) startet den Timer1 und der zweite (Stop-Button) stopt den Timer1.
    Dann hab ich eine TextBox (ReadOnly). Sie wird durch den Timer jede Sekunde um die Zahl 1 erhöht. Also nach 5 sec. steht die Zahl 5 in der TextBox.
    Der Code für das geht so:

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. Dim Zahl1 As Double
    3. Zahl1 = 1
    4. Dim Zahlx As Double
    5. Zahlx = TextBox1.Text
    6. TextBox1.Text = Zahlx + Zahl1
    7. End Sub


    Nun zu der Progressbar. Ihr Maximum sollte die Zahl 10 sein .

    Erste Frage: Wie sagt ich ihr, dass sie gefüllt sein sollte, wenn die Zahl 10 erreicht ist ( Also soll sie bei 5 50% anzeigen)?
    Zweite Frage: Wie sag ich ihr, dass ihre Zahl Zahlx(Also TextBox1.Text) ist ?

    Lg Dancger

    Bitte KEINEN Code und wenn, dann mit einer Erklärung, so dass ich etwas lernen kann :D
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...
    ProgressBar, und dort schau Dir mal Maximum, Minimum und Value an.

    Grundsätzliche Empfehlung: Führe den Zählwert als Variable mit und nimm das nicht wieder aus der Textbox raus (z.B. kracht es sonst ganz schnell wenn der Benutzer da irgendwas eingibt). Und ändere es am besten von Double in Integer, da du eh nur in Einerschritten gehst und Progressbar sowas auch erwartet (spart Dir Konvertierungen).

    Gruß FatFire

    VB.NET-Quellcode

    1. Zahlx = TextBox1.Text

    = wuaaaaaaaah^^
    richtig wäre es eher so:

    VB.NET-Quellcode

    1. Zahlx =Double.Parse( TextBox1.Text)

    am besten du schreibst gleich mal "Option Strict On" in die wirklich oberste Zeile...

    Zur Progressbar:
    Guck dir doch mal die Eigenschaften der ProgressBar an:
    da gibt es eine Eigenschaft Maximum, diese musst du einfach auf 10 stellen...
    und wie Cr4ckY bereits gesagt hat, legst du mit Value den aktuellen Wert fest...

    Edit: @FatFire: der Benutzer wird nichts in die TB eingeben(der TE hat bereits geschrieben, dass diese ReadOnly ist...)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Ja das mit Value war nicht schlecht, Danke :D

    Mein Code sieht jetzt so aus:

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. Dim Zahl1 As Double
    3. Zahl1 = 1
    4. Dim Zahlx As Double
    5. Zahlx = TextBox1.Text
    6. TextBox1.Text = Zahlx + Zahl1
    7. ProgressBar1.Value = 10
    8. If ProgressBar1.Maximum Then Timer1.Stop()
    9. Dim ZahlP As Integer
    10. ZahlP = ProgressBar1.Maximum
    11. ZahlP = ZahlP + Zahl1
    12. End Sub


    Das Problem ist, dass er bei 10% also bei der Zahl 1 nicht mehr weiter zählt.

    Wo liegt der Fehler ??
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...
    @FatFire: der Benutzer wird nichts in die TB eingeben(der TE hat bereits geschrieben, dass diese ReadOnly ist...)

    Hups, stimmt, sorry, überlesen.
    Trotzdem hat das irgendwie sowas wie ein fades Beigeschmäckle. Die GUI sollte für mich immer nur informativen Charakter haben, als Schnittstelle zwischen Benutzer und Logik dienen. Nicht als Variablenparkplatz. Aber das ist wohl Geschmackssache.

    Gruß FatFire
    Dim Zahl as Integer += 1
    In deinem Code fehlt ein +, somit bleibt deine Zahl immer bei 1, und somit die Progressbar auch bei 10%^^

    Edit: Wieso hast du eigentlich Zahlx, Zahl1, Zahlp? Was genau willst du denn erreichen? Ich denke das geht auch kürzer..

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Cr4ckY“ ()

    jetzt setze gleich mal "Option Strict On" in die erste Zeile, dann versucht du mal schön deine Fehler(ein Beispiel hab ich bereits geschrieben) zu beheben

    VB.NET-Quellcode

    1. ProgressBar1.Value = 10
    setzt die Value, den Wert auf 10, jedoch sollte der Wert eher (Zahlx + Zahl1) sein

    VB.NET-Quellcode

    1. If ProgressBar1.Maximum Then Timer1.Stop()
    2. Dim ZahlP As Integer
    3. ZahlP = ProgressBar1.Maximum
    4. ZahlP = ZahlP + Zahl1

    damit wirste wohl kaum was erreichen, geh in den Designer, markiere die ProgressBar drücke F4, und ändere im Eigenschaftenfenster die Maximum Eigenschaft auf 10...

    statt

    VB.NET-Quellcode

    1. If ProgressBar1.Maximum Then...

    wäre wohl eher das hier richtig:

    VB.NET-Quellcode

    1. If ProgressBar1.Maximum = ProgressBar1.Value Then...

    in Pseudo:

    Quellcode

    1. Wenn MAXIMALWERT = AKTUELLERWERT Dann


    Edit: @Cr4ckY: nö :P Die Zahl wird erst hier definiert und somit kannst du den Wert auch noch nicht aufadieren ;)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Also:
    Dank dem Link weiss ich jetzt was die 3 (Value,Maximum,Minimum) bedeutet. Das hilft mir schon enorm :D

    @jvbsl
    = wuaaaaaaaah^^
    richtig wäre es eher so:

    VB.NET-Quellcode

    1. Zahlx =Double.Parse( TextBox1.Text)


    Ich denke mal an, es ist ''hässlich'' gschrieben. ^^
    Aber in deiner Version hab ich das nochnie gesehen.

    Was ist den bitteschön Parse ? ?(

    Würd ich noch gerne wissen ^^

    Lg Dancger
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...
    der Text der TextBox ist vom Typ String(CharackterArray = Zeichenfolge = Text^^), Double ist ein Zahlenwert(hier würde wie bereits geschrieben wurde Integer genügen, Integer ist eine 32-Bit Ganzzahl Double hat noch nachkommastellen ;)), Decimal/Double/Integer(Int32)/Short(Int16)/Long(Int64) .Parse ist dazu da einen String in den entsprechenden Zahlenwert umzuwandeln, schließlich kannst du ja nicht sagen "Hallo" ist eine Zahl, wenn du Parse verwendest wird bei einer solchen Zuweisung eine Exception ausgeworfen, somit weißt du, wenn ein Fehler kommt, woher dieser denn kommt, willst du auch eine Exception verhindern, kannst du TryParse verwenden, dort erfährst du über einen boolschen Wert(Ja, Nein), ob die Konvertierung erfolgreich war.

    Und ja der Code ist "hässlich"^^, was du auch merkst, wenn du "Option Strict On" in die erste Zeile setzt, bzw. dies Allgemein einstellst...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Also: :D
    Double ist ein Zahlenwert(hier würde wie bereits geschrieben wurde Integer genügen, Integer ist eine 32-Bit Ganzzahl Double hat noch nachkommastellen ;))

    D.h.: Double kann sein 3,6. Und Integer kann nur 3 oder 4 sein, aber nciht 3,6 ? Wenn ja dann hab ichs kapiert :thumbsup:

    Parse ist dazu da einen String in den entsprechenden Zahlenwert umzuwandeln

    Ich glaub ich habs verstanden :D

    und noch zu:
    Und ja der Code ist "hässlich"^^, was du auch merkst, wenn du "Option Strict On" in die erste Zeile setzt, bzw. dies Allgemein einstellst...

    Ist ja genial, da kreig ich grade Fehlermeldungen dass er keine implizierten Konvertirungen von String in Double zulässt :P

    Ich mach mich mal ans Werk mit diesen Tipps :thumbsup:

    Danke
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...
    Wenn ich jetzt aber

    VB.NET-Quellcode

    1. Zahlx = Double.Parse(TextBox1.Text)

    schreibe, dann motzt er dass die Zahlx nicht deklariert wurde ?( Dabei deklarieren wir sie ja gerade, oder nicht...

    Kann es sein, das er motzt, weil die TextBox momentan noch leer ist, also noch keine Inhalte hat ???
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...
    bevor du Zahlx = irgendetwas machst, musst du diese Variable auch deklarieren(also Dim Zahlx As Double), also vorher heißt so viel wie eine bzw. ein paar Zeilen zuvor ;)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Hallo wieder

    Ich hab nun das Programm fertig und es funktioniert. Leider ist etwas daran komisch.
    Ich hab die Progressbar von 0 - 10 eingestellt. Trotzdem zeigt er bevor ich debugge 15 - 20 % an (geschätzt). Ausserdem braucht er nicht 10 Sekunden sondern 12, für den ganzen Ablauf, obwohl ich den Timer auf jede Sekudne gestellt habe. Und wenn er jede Sekunden 10% ausfüllt, sollten es 10 Sekunden sein bei 100%... Ausserdem zeigt er erst nach 2 Sekunden die Progressbar-Leiste an :S

    Das mit Zahlx = Integer.Parse(TextBox1.Text) hat nicht funktioniert...

    VB.NET-Quellcode

    1. Option Strict Off
    2. Public Class Form1
    3. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    4. Dim Zahlx As Double
    5. Zahlx = TextBox1.Text
    6. TextBox1.Text = Zahlx + 1
    7. ProgressBar1.Value = Zahlx
    8. If ProgressBar1.Value = ProgressBar1.Maximum Then Timer1.Stop()
    9. End Sub
    10. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    11. Timer1.Start()
    12. End Sub
    13. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    14. Timer1.Stop()
    15. TextBox1.Clear()
    16. ProgressBar1.Value = 1
    17. End Sub
    18. Private Sub ProgressBar1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProgressBar1.Click
    19. End Sub
    20. End Class


    Probierts mal aus...

    Download-Datei:
    Dateien
    MESS WITH THE BEST, DIE LIKE THE REST! :evil:
    n'paar Links: DNS Tools, Steal WA DB, Droidsheep...
    Was genau willst du denn erreichen? Pro Sekunde 10% hinzufügen? Dann würde das hier auch reichen:

    VB.NET-Quellcode

    1. 'Timer mit Intervall = 1000
    2. ProgressBar1.Value += 1

    Wenn nicht, dann sag mal bitte was du machen willst.

    Achja, bei Button2 solltest du statt ProgressBar1.Value = 1, Value = 0 schreiben.
    Jetzt habe ich einige Fragen:
    Warum in der ersten Zeile option strict off? Traust du dich nicht an die Umwandlungsfunktionen?

    Mit einem String (textbox1.text) rechnet man nicht. Such dir eine Variable aus, die du verwenden willst. Dann überlege dir, welcher Wertetyp dort verwendet werden soll. Double ist für Kommazahlen interessant. Für einen Fortschritt als Zahl zwischen 0 und 100 reicht doch eine Ganzzahl ohne Komma (=INTEGER).

    Falls Du ein Double verwendest, dann nimmst Du Double.Parse. Hast du einen Integer, dann versuche Integer.Parse.
    Das mit Zahlx = Integer.Parse(TextBox1.Text) hat nicht funktioniert...
    "Hat nicht funktioniert" ist nach wie vor keine aussagekräftige Fehlerbeschreibung.

    Für die Erhöhung des Wertes der ProgressBar nehmt bitte...

    VB.NET-Quellcode

    1. ProgressBar1.Increment(Wert)
    2. '...oder...
    3. ProgressBar1.PerformStep

    Diese beiden Methoden verhindern eine Fehlermeldung, wenn ihr mit der Wertzuweisung über das Maximum rausschießt (oder unter das Minimum)
    Ausserdem braucht er nicht 10 Sekunden sondern 12,

    Der Startwert deiner Progressbar1 ist 2. ...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „der_Kurt“ () aus folgendem Grund: Fehler ausgebessert