Countdown Timer Problem

  • VB.NET

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von nikexo.

    Countdown Timer Problem

    Hallo Community!

    Wollte grade einen Countdown Timer erstellen.
    Die Source habe ich aus dem Internet.
    Ich habe folgendes Problem:
    Ich will nicht das z.B. die Sekunden von 10 auf 9 springen sondern von 10 auf 09.

    Ich habe folgende Elemente:
    1x Start/Pause Button (um den Timer zu starten)
    1x OK Button (Um die eingegebene Zeit festzulegen)
    1x Reset Button (Um die Zeit auf 00:00:00 zu setzen)
    3x Label (STUNDEN-; MINUTEN-; SEKUNDENANZEIGE)
    3x Textbox (STUNDEN-; MINUTEN-; SEKUNDENTEXTBOX)

    Bild:


    Problem (ich will 07 nicht 7):



    Sourcecode:

    VB.NET-Quellcode

    1. Public Class Form2
    2. Private Sub reset_button_Click(sender As Object, e As EventArgs) Handles reset_button.Click
    3. stunden_label.Text = "00"
    4. minuten_label.Text = "00"
    5. sekunden_label.Text = "00"
    6. Timer1.Enabled = False
    7. End Sub
    8. Private Sub start_pause_button_Click(sender As Object, e As EventArgs) Handles start_pause_button.Click
    9. If start_pause_button.Text = "Start" Then
    10. Timer1.Enabled = True
    11. ok_button.Enabled = False
    12. start_pause_button.Text = "Pause"
    13. ElseIf start_pause_button.Text = "Pause" Then
    14. Timer1.Enabled = False
    15. reset_button.Enabled = True
    16. ok_button.Enabled = True
    17. start_pause_button.Text = "Start"
    18. End If
    19. End Sub
    20. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    21. Timer1.Interval = 1000
    22. If stunden_label.Text = "" Then
    23. stunden_label.Text = "0"
    24. End If
    25. If minuten_label.Text = "" Then
    26. minuten_label.Text = "0"
    27. End If
    28. If sekunden_label.Text = "" Then
    29. sekunden_label.Text = "0"
    30. End If
    31. If stunden_label.Text = "00" Then
    32. stunden_label.Text = "0"
    33. End If
    34. If minuten_label.Text = "00" Then
    35. minuten_label.Text = "0"
    36. End If
    37. If sekunden_label.Text = "00" Then
    38. sekunden_label.Text = "0"
    39. End If
    40. If sekunden_label.Text > "0" Then
    41. sekunden_label.Text = sekunden_label.Text - 1
    42. End If
    43. If minuten_label.Text > "0" Then
    44. If sekunden_label.Text = "0" Then
    45. minuten_label.Text = minuten_label.Text - 1
    46. sekunden_label.Text = "59"
    47. End If
    48. End If
    49. If stunden_label.Text > "0" Then
    50. If minuten_label.Text = "0" Then
    51. If sekunden_label.Text = "0" Then
    52. stunden_label.Text = stunden_label.Text - 1
    53. minuten_label.Text = "59"
    54. sekunden_label.Text = "59"
    55. End If
    56. End If
    57. End If
    58. If sekunden_label.Text = "0" Then
    59. If minuten_label.Text = "0" Then
    60. If stunden_label.Text = "0" Then
    61. Timer1.Enabled = False
    62. MessageBox.Show("Die Zeit ist abgelaufen!", _
    63. "Zeit um", _
    64. MessageBoxButtons.OK, _
    65. MessageBoxIcon.Information)
    66. start_pause_button.Text = "Start"
    67. reset_button.Enabled = False
    68. End If
    69. End If
    70. End If
    71. End Sub
    72. Private Sub ok_button_Click(sender As Object, e As EventArgs) Handles ok_button.Click
    73. If sekunden_textbox.Text = "00" Then
    74. If minuten_textbox.Text = "00" Then
    75. If stunden_textbox.Text = "00" Then
    76. start_pause_button.Enabled = False
    77. MsgBox("Bitte gib einen Wert größer als 0 ein!")
    78. End If
    79. End If
    80. End If
    81. If sekunden_textbox.Text = "0" Then
    82. If minuten_textbox.Text = "0" Then
    83. If stunden_textbox.Text = "0" Then
    84. start_pause_button.Enabled = False
    85. MsgBox("Bitte gib einen Wert größer als 0 ein!")
    86. End If
    87. End If
    88. End If
    89. If sekunden_textbox.Text = "" Then
    90. minuten_textbox.Text = ""
    91. stunden_textbox.Text = ""
    92. start_pause_button.Enabled = False
    93. MessageBox.Show("Bitte gib eine Zeit ein!", _
    94. "Keine Zeit eingegeben", _
    95. MessageBoxButtons.OK, _
    96. MessageBoxIcon.Warning)
    97. End If
    98. ok_button.Enabled = True
    99. stunden_label.Text = stunden_textbox.Text
    100. minuten_label.Text = minuten_textbox.Text
    101. sekunden_label.Text = sekunden_textbox.Text
    102. If stunden_label.Text > "0" Then
    103. start_pause_button.Enabled = True
    104. End If
    105. If minuten_label.Text > "0" Then
    106. start_pause_button.Enabled = True
    107. End If
    108. If sekunden_label.Text > "0" Then
    109. start_pause_button.Enabled = True
    110. End If
    111. End Sub
    112. End Class


    Ich hoffe das mir jemand weiterhelfen kann. :)

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

    Die 119 Zeilen kopierten Code aus dem Internet kannst Du gleich wieder vergessen. Ich schätze, das lässt sich ungefähr mit 5-10 Zeilen (wenn überhaupt) erledigen.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Also ich hätte gesagt am besten geht wenn du eine Vordefinierte Anzahl an Nullen (als String ) nimmst und diese dann abschneidest. Also 10 hat eine Länge von zwei und 9 eine Länge von 1. Wenn du jetzt von "00" 2 abschneidest und dann vorne an die 10 anfügst kommt da 10 raus. Wenn du das gleiche bei der 9 machst kommt eben 09 raus.

    Stichwörter: Substring, Length

    Und wie @SpaceyX schon geschrieben hat. Kopier keinen Code aus dem Internet den du nicht oder nur zum Teil nicht verstanden hast. Es wird dich nicht weiterbringen. Beschäftige dich lieber erst mit den Grundlagen.


    Edit: und da wir grad dabei sind Msgbox ist veralteter VB6 code in VB.NET benutzt man Messagebox.Show() und bitte immer Option Strict On. Du bringst oben im Code Datentypen durcheinander.

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Mokki schrieb:

    Also ich hätte gesagt am besten geht wenn du eine Vordefinierte Anzahl an Nullen (als String ) nimmst und diese dann abschneidest. Also 10 hat eine Länge von zwei und 9 eine Länge von 1. Wenn du jetzt von "00" 2 abschneidest und dann vorne an die 10 anfügst kommt da 10 raus. Wenn du das gleiche bei der 9 machst kommt eben 09 raus.

    Stichwörter: Substring, Length


    Muss man da viel umschreiben? Bzw. schaffe ich das als Anfänger?
    Ja ist nen Einzeiler :)

    Ich kanns nochmal versuchen also:
    Die Zahlen sind ja Integer.
    Wenn man diese in eine String konvertiert kann man mit ihnen nichtmehr rechnen. Man kann aber dadurch die Länge also wieviele Stellen eine Zahl hat herausfinden.
    Bei "10" sind das eben 2 bei "9" ist das eine.
    So jetzt wissen wir:
    Alle Zahlen sollen auf zwei Stellen aufgefüllt werden also aus 1 wird "01" aus 2 wird "02" usw. und aus 10 wird "10".
    Also nemmen wir eine String mit zwei Nullen. Keinen Integer einen String!
    Der hat jetzt eine Länge von 2: "00"
    So jetzt kann man mit Substring von dem String Teile abschneiden. Also schneidet man die Länge der Zahlen ab. Bei "10" wär das dann 2.
    Wenn wir von "00" zwei Chars abschneiden bleibt "" zurück. Das hängen wir jetzt an die "10" vorne dran. Also "" & "10" = "10"
    Bei der "9" machen wir das gleiche: da sie aber nur eine Stelle hat schneiden wir auch nur eine ab. Also wird aus "00" "0". Wenn wir jetzt "0" & "1" zusammenfügen kommt "01" heraus.

    Stichworte nach denne du Googel kannst sind: ToString, Substring und Length

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    @petaod so macht das keinen Sinn...
    ​Ich hätte ihm auch den Einzeiler hinwerfen können und das Thema wär erledigt gewesen. Aber ich habs nicht getan weil ich mir schon gedacht hab was das Problem ist...
    Also @nikexo fang bitte erst mit den Grundlagen an. Ich weis das ist zäh aber wir mussten da alle durch...
    Ich hab hier noch nen paar Links für dich:
    Entwickler-Ressourcen und Tools, Bücher und WebCasts
    Böses aus VB6/VB2003 - und die richtigen VB.NET-Alternativen
    Tutorials / eBooks

    Wenn du mir die Fragen beantworten kannst werde ich auch versuchen das ganze nochmal zu erklären:
    Was sind Datentypen?
    Wie konvertiere ich von Integer nach String u. zurück?
    Weshalb Option Strict on?
    Wie starte u. beende ich eine Timer?
    Wie benutzt man Substring?

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    nikexo schrieb:

    "Beim Konvertieren von "String" in "System.IFormatProvider" könnten Laufzeitfehler auftreten."


    Ja. Mein Fehler.
    Weil man die .ToString normalerweise nicht auf Strings, sondern (in diesem Fall) auf Zahlen anwendet.
    Nur finde ich in deinem Code keine Zahlen, weil du alle als String speicherst.

    Wenn ich dir jetzt empfehle Option Strict On einzuschalten, damit du typsicher programmierst, wird wahrscheinlich gar nichts mehr laufen.
    Ich halte mich bei dem Programm am besten ganz raus.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @nikexo Beschreib bitte noch mal Dein Problem aus jetziger Sicht und poste dazu den aktuellen Code.
    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!

    nikexo schrieb:

    VB.NET-Quellcode

    1. sekunden_label.Text = sekunden_label.Text - 1

    nikexo schrieb:

    Ok, aber warum wird "00" unterwellt?

    Mach bitte ganz schnell Option Strict On, damit Du mit korrekten Datentypen arbeitest.
    Trenne Daten und GUI. Erstell Dir geeignete Variablen, die den Zählerzustand repräsentieren und zeig im Timertakt Zwischenergebnisse an.
    Wie Du Deine numerischen Werte formatierst, hat Dir @petaod geschrieben.
    Wenn Du diese Information auf den falschen Datentyp anwendest, kommt es zu Fehlern:

    Melde Dich wieder, wenn Du Deinen Code auf Strict On umgestellt hast.
    Füge dazu in Deinen Code als erste Zeile dies ein:

    VB.NET-Quellcode

    1. Option Strict On
    Oder stell besser das ganze Projekt um: Projekt -> Eigenschaften -> Kompilieren.
    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!