Announcement

Collapse
No announcement yet.

Timer in hh:mm:ss - Format anzeigen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Timer in hh:mm:ss - Format anzeigen

    Habe eine kleine Timerfunktion programmiert. Funktioniert soweit alles bestens. Solange der Interval auf 18000 (Millisekunden) steht wird auch der Timer korrekt angezeigt (00:29:59 etc.) . Setzte ich aber nun den Interval auf 36000 (Millisekunden) also 60 Minuten dann kommt in der Anzeige nur noch Blödsinn (also 01:58:-3498 etc.). Woran kann das liegen, wer kann mir evtl. helfen?

    Hier mal der Code (VB.net 2005):

    Dim zaehler1 As Integer = 18000

    Private Sub InitializeTimer()
    ' Timer-Intervall auf eine Sekunde festlegen
    Timer1.Interval = 1000
    End Sub

    Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click

    ' Timer aktivieren

    Timer1.Start()

    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

    Dim Seconds As Long, Minutes As Long, Hours As Long

    ' Millisekunden in ein Stunden:Minuten:Sekunden-Format umrechnen
    Seconds = Fix(zaehler1 / 10)
    Hours = (Seconds - (Seconds Mod 60)) / 60 / 60
    Minutes = (Seconds - (Hours * 60) - (Seconds Mod 60)) / 60
    Seconds = Seconds - (Hours * 60 * 60) - (Minutes * 60)

    ' Zeitformat im Labelfeld ausgeben
    lblTimer.Text = Format(Hours, "00:") & Format(Minutes, "00:") & Format(Seconds, "00")

    ' Zählvariable um 1 verringern
    zaehler1 -= 1

    If zaehler1 = -1 Then
    ' Timer anhalten
    Timer1.Stop()
    ' Ereignis starten

    Tips_Tricks.Show()
    ' Startwert neu setzen
    zaehler1 = 18000

    End Sub

  • #2
    Kann es sein, dass Beschreibung und Programm nicht ganz zusammenpassen? "Solange der Interval auf 18000 (Millisekunden)", aber Timer1.Interval steht fest auf 1000. Auf 18000 steht dagegen zaehler1.

    Beim Zähler sind das aber vermutlich nicht Millisekunden, sondern Zehntelsekunden: 60 Minuten sind 3600 Sekunden sind 3.600.000 ms. Bei jedem Timer-Tick (also jede Sekunde einmal) dividierst Du den Zähler durch 10, bevor daraus die Elemente einer Zeit errechnet werden; anschließend wird der Zähler um 1 verringert.

    Vorschlag 1: Prüfe noch genauer, welcher Wert zu welchem Zeitpunkt geändert werden soll und wo Sekunden und wo Millisekunden gemeint sind.

    Vorschlag 2: Verwende als Zähler einen TimeSpan currentValue, der ist dafür gedacht. Damit kannst Du den Anfangswert und die Differenz genau festlegen, siehe die verschiedenen Konstruktoren. Für den aktuellen Restwert brauchst Du nicht selbst zu rechnen, sondern nimmst einfach TimeSpan.Hours usw. Für die Ausgabe kannst Du TimeSpan.ToString() mit einer passenden Formatierung verwenden.

    Gruß Jürgen

    PS. Bitte markiere Code mit dem #-Button, das liest sich besser.

    Nachtrag: Ich hatte noch vergessen, auf mögliche Ursachen Deines eigentlichen Problems hinzuweisen. Zum einen könntest Du Dich mit der mehrfachen Umrechnung mit modulo, Division und Subtraktion vertan haben. Zum anderen sind Gleitkommazahlen unter NET ungenau (mit Ausnahme von decimal), und die VB-Division liefert eine Gleitkommazahl. Alles zusammen könnte zu fehlerhaften Ergebnissen und Anzeigen führen.
    Zuletzt editiert von Jürgen Thomas; 15.04.2008, 13:56. Reason: Nachtrag hinzugefügt.

    Comment


    • #3
      Danke!

      Danke für die schnelle Antwort. TimeSpan war der entscheidende Hinweis. Habe zwar noch etwas getüftelt um die korrekte Syntax rauszufinden aber jetzt funzt es. Super!

      Die Formatierung von Code mit # merke ich mir natürlich für`s nächste mal.

      Gruß Thoralf

      Comment

      Working...
      X