Timer, Gesamtzeit herausfinden

  • VB.NET

Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von Snaptu.

    Timer, Gesamtzeit herausfinden

    Guten Tag,
    ich habe einen Timer und möchte nun die Gesamtzeit berechnen lassen und in ein Label ausgeben.
    Bei jedem neuen Klick auf Start und Stop soll sie aktualisieren und auch in einer .ini am Besten gespeichert werden und immer addiert. (Um bei Load laden zu lassen eine INI)

    Bisheriger Code:

    VB.NET-Quellcode

    1. Private SW As New Stopwatch


    VB.NET-Quellcode

    1. Private Sub zeitstart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles zeitstart.Click
    2. SW.Start()
    3. Stoppuhr.Start()
    4. aktuell.Visible = True
    5. zeitstart.Enabled = False
    6. zeitpause.Enabled = True
    7. zeitstopp.Enabled = True
    8. zeitstart.Text = "Start"
    9. End Sub
    10. Private Sub Stoppuhr_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Stoppuhr.Tick
    11. Dim TS As TimeSpan = TimeSpan.FromMilliseconds(SW.ElapsedMilliseconds)
    12. aktuell.Text = TS.ToString
    13. End Sub
    14. Private Sub zeitpause_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles zeitpause.Click
    15. SW.Stop()
    16. Stoppuhr.Stop()
    17. zeitstart.Enabled = True
    18. zeitpause.Enabled = False
    19. zeitstopp.Enabled = True
    20. zeitstart.Text = "Weiter"
    21. End Sub
    22. Private Sub zeitstopp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles zeitstopp.Click
    23. SW.Stop()
    24. Stoppuhr.Stop()
    25. SW.Reset()
    26. zeitstart.Enabled = True
    27. zeitpause.Enabled = False
    28. zeitstopp.Enabled = False
    29. zeitstart.Text = "Start"
    30. aktuell.Text = "00:00:00:00"
    31. End Sub


    Wo die addierte Gesamtzeit von allen Messungen ausgegeben wird:

    VB.NET-Quellcode

    1. Private Sub insgesamt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles insgesamt.Click
    2. End Sub
    ausm handgelenk geschüttelt würde ich es so machen

    VB.NET-Quellcode

    1. class whatever
    2. private seconds as long
    3. private oTimer as timer
    4. sub load()
    5. if my.settings.iTime isnot nothing then
    6. seconds = my.settings.iTime
    7. else
    8. seconds = 0
    9. end if
    10. oTimer = new timer()
    11. oTimer.interval = 1000
    12. oTimer.enabled = true
    13. addHandler oTimer.Tick, addressof timer_tick
    14. oTimer.start()
    15. end sub
    16. private sub timer_tick(sender as object, e as eventargs)
    17. seconds += 1
    18. end sub
    19. private sub close()
    20. my.settings.iTime = seconds
    21. my.settings.save()
    22. end sub
    23. private sub gesammtZeit()
    24. label1.text = cstr(seconds) & " sekunden vergangen"
    25. end sub
    26. end class

    Chef schrieb:

    Um bei Load laden zu lassen
    nimm My.Settings.
    Mach Dir ein Long-Setting (hier: Milliseconds) und bau Dir um die Betreffende Aktion eine StopWatch:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private sw As New Stopwatch
    3. Private ElapsedMilliseconds As Long
    4. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    5. My.Settings.Reload()
    6. Me.ElapsedMilliseconds = My.Settings.Milliseconds
    7. End Sub
    8. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    9. sw.Start()
    10. End Sub
    11. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    12. sw.Stop()
    13. Me.ElapsedMilliseconds += sw.ElapsedMilliseconds
    14. My.Settings.Save()
    15. End Sub
    16. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Chef schrieb:

    Klappt nicht-

    Doch! Garantiert!

    VB.NET-Quellcode

    1. Dim t As New TimeSpan(5, 6, 2)
    2. Dim s = String.Format("Insgesamt: {0,2} Stunde, {1,2} Minuten und {2,2} Sekunden", t.Hours, t.Minutes, t.Seconds)
    3. 'In "s" steht jetzt: "Insgesamt: 5 Stunde, 6 Minuten und 2 Sekunden"
    Da steht nun, 5 Stunden etc., ich habe es nur eine Sekunde gestartet/gestoppt.
    Es lädt auch nicht den insgesamt Wert beim Load.
    Der Insgesamtwert soll bei jedem Load geladen werden und immer größer werden, wenn man den timer startet.
    So ne Art (Benutzungszeit) mit Button.

    Chef schrieb:

    Es lädt auch nicht den insgesamt Wert beim Load.
    Dann hast Du wohl was falsch gemacht.
    Setz einen Haltepunkt auf die 1. Zeile und steppe Dein Programm durch.
    Vergleiche den Inhalt der Variablen mit dem wert Deiner Erwartung.
    Hast Du eine Abweichung gefunden, hast Du einen Fehler gefunden.
    Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Chef: Kein Wunder steht da was von wegen 5 Stunden - Die TimeSpan Struktur wird ja auch so initialisiert!!! X(
    Sieh dir mal den Konstruktor an!!!

    Higlav schrieb:

    VB.NET-Quellcode

    1. Dim t As New TimeSpan(5, 6, 2)

    Chef schrieb:

    Da steht nun, 5 Stunden etc., ich habe es nur eine Sekunde gestartet/gestoppt.

    Es war ein BEISPIEL! Für TimeSpan mit 5 Stunden, 6 Minuten und 2 Sekunden.

    Dir geht es eigentlich nur darum, deine Millisekunden in die Stunden, Minuten und Sekunden umzurechnen. Wie wäre es, wenn du die Millisekunden erst durch 60*60*1000 teilst, dann bekommst du Stunden, den Rest teilst du durch 60*1000, dann bekommst du Minuten und den Rest teilst du durch 1000 und bekommst Sekunden. Wenn der Wert jeweils 0 ist, dann zeigst du ihn halt nicht an.
    Habe es gemacht, wie ich es vorher hatte.
    Bei der Möglichkeit bleibe ist jetzt.

    VB.NET-Quellcode

    1. Private Sub zeitstopp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles zeitstopp.Click
    2. Dim Add1 As String
    3. Dim Add2 As String
    4. Dim insadd As String
    5. Add1 = aktuell.Text
    6. Add2 = My.Computer.FileSystem.ReadAllText("D:/xxxx/xxxx/xxxx/xxxx.ini")
    7. insadd = Add1 + Add2
    8. SW.Stop()
    9. Uhr.Stop()
    10. My.Computer.FileSystem.WriteAllText("D:/xxxx/xxxx/Fortschritt/xxxx.ini", insadd, False)
    11. SW.Reset()
    12. zeitstart.Enabled = True
    13. zeitpause.Enabled = False
    14. zeitstopp.Enabled = False
    15. zeitstart.Text = "Start"
    16. aktuell.Text = "00:00:00:00"
    17. End Sub

    Nur, er speichert das zwar nun nebeneinander, doch leider anstatt die Zeit zu addieren und das addierte Ergebnis zu schreiben so:

    00:00:05.351000000:00:02.8280000


    Es soll einfach > Alten Wert auslesen und mit aktuellen addieren und speichern.
    Am Besten noch in Stunden/Minuten/Sekunden ausgeben.