Rechen Frage!

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von maxlcp.

    Rechen Frage!

    Hey Leute...

    ich hab grad irgendwie nen hänger...
    ich denk mal die Frage kann man nur mit viel Logik lösen...
    Diese Funktion brauch ich für ein Programm welches ich mit Visual Basic 2008 programmiere

    Ich habe zwei Uhrzeiten in je einem Label....
    Die eine Zeit ist fest angegeben z.B. 14Uhr und die andere ist die aktuelle Uhrzeit z.b. 12.30Uhr....wie kann ich in einer progressbar anzeigen lassen wie lange es noch dauert bis (bezogen auf die aktuelle Uhrzeit) die fest angegebene Zeit erreicht ist?....also wenn der Vorgang gestartet ist soll die Progressbar auf 0 stehen....wenn die aktuelle Uhrzeit mit der endzeit übereinstimmt soll sie auf 100 stehen!..die Spanne dazwischen muss bitte von einem von euch programmiert werden... Dabei muss aber auch der 24 Zyklus beachtet werden....ich schaff das nicht und hoffe das mir jemand helfen kann :)

    LG


    Präfix angepasst. Das nächste Mal selbst machen! MfG gs93

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

    Annonator schrieb:

    Poste mal denbisherigen code, ich fang mal an da was zu schreiben ^^
    Hey ...äm....da hab ich noch nichts, weil es da nur den code gibt den ich nicht kenne....oder nicht drauf komme.
    Also ich habe mir das so gedacht!:


    Und ein Timer müsste jede Sekunde dann errechnen wie der Interval aussieht!
    Bilder
    • Bild.jpg

      42,64 kB, 493×201, 192 mal angesehen

    Annonator schrieb:

    hm, zuerst der ganznormale countdown und dann die Progressbar, also ich mach das jetzt mit nem countdown wo steht wie lange es noch dauert, ist das ok
    jo das ist super! Denk aber bitte an den 24 Stunden Zyklus...nicht das es dann besonders in der Nacht bei 00:00Uhr nen Problem gibt....ja und es wäre super wenn du parallel zum countdown die Progressbar mitziehen könntest:-)

    LG und danke nochmal
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim a As Integer
    3. Dim b As Integer
    4. Dim c As Integer
    5. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    6. Dim hour2 As Integer = DateTime.Now.Hour
    7. Dim minute2 As Integer = DateTime.Now.Minute
    8. Dim second2 As Integer = DateTime.Now.Second
    9. Select Case minute2
    10. Case 1
    11. minute2 = "01"
    12. Case 2
    13. minute2 = "02"
    14. Case 3
    15. minute2 = "03"
    16. Case 4
    17. minute2 = "04"
    18. Case 5
    19. minute2 = "05"
    20. Case 6
    21. minute2 = "06"
    22. Case 7
    23. minute2 = "07"
    24. Case 8
    25. minute2 = "08"
    26. Case 9
    27. minute2 = "09"
    28. Case 0
    29. minute2 = "00"
    30. Case Else
    31. minute2 = minute2
    32. End Select
    33. Select Case hour2
    34. Case 1
    35. hour2 = "01"
    36. Case 2
    37. hour2 = "02"
    38. Case 3
    39. hour2 = "03"
    40. Case 4
    41. hour2 = "04"
    42. Case 5
    43. hour2 = "05"
    44. Case 6
    45. hour2 = "06"
    46. Case 7
    47. hour2 = "07"
    48. Case 8
    49. hour2 = "08"
    50. Case 9
    51. hour2 = "09"
    52. Case 0
    53. hour2 = "00"
    54. Case Else
    55. hour2 = hour2
    56. End Select
    57. Label1.Text = hour2 & ":" & minute2
    58. If TextBox1.Text & ":" & TextBox2.Text = Label1.Text Then Label1.Text = "Die Zeit ist abgelaufen"
    59. a = TextBox2.Text - DateTime.Now.Minute
    60. b = TextBox1.Text - DateTime.Now.Hour
    61. If a < 0 Then
    62. a += 60
    63. b -= 1
    64. End If
    65. If b < 0 Then
    66. b += 24
    67. End If
    68. Select Case a
    69. Case 1
    70. a = "01"
    71. Case 2
    72. a = "02"
    73. Case 3
    74. a = "03"
    75. Case 4
    76. a = "04"
    77. Case 5
    78. a = "05"
    79. Case 6
    80. a = "06"
    81. Case 7
    82. a = "07"
    83. Case 8
    84. a = "08"
    85. Case 9
    86. a = "09"
    87. Case 0
    88. a = "00"
    89. Case Else
    90. a = a
    91. End Select
    92. Select Case b
    93. Case 1
    94. b = "01"
    95. Case 2
    96. b = "02"
    97. Case 3
    98. b = "03"
    99. Case 4
    100. b = "04"
    101. Case 5
    102. b = "05"
    103. Case 6
    104. b = "06"
    105. Case 7
    106. b = "07"
    107. Case 8
    108. b = "08"
    109. Case 9
    110. b = "09"
    111. Case 0
    112. b = "00"
    113. Case Else
    114. b = b
    115. End Select
    116. Label5.Text = b & ":" & a
    117. End Sub
    118. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    119. a = TextBox2.Text - DateTime.Now.Minute
    120. b = TextBox1.Text - DateTime.Now.Hour
    121. If a < 0 Then
    122. a += 60
    123. b -= 1
    124. End If
    125. If b < 0 Then
    126. b += 24
    127. End If
    128. c = CInt(a + (b * 60))
    129. ProgressBar1.Maximum = c
    130. Timer1.Start()
    131. Timer2.Start()
    132. End Sub
    133. Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    134. If TextBox1.Text = "" Then TextBox1.Text = "0"
    135. If TextBox1.Text > 23 Then TextBox1.Text = 0 ' Bestimmte max. hier 59 (für eine Uhr)
    136. If TextBox1.TextLength > 2 Then
    137. TextBox1.Text = TextBox1.Text.Remove(2, 1)
    138. End If
    139. End Sub
    140. Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    141. Select Case Asc(e.KeyChar)
    142. Case 48 To 57, 8
    143. Case Else
    144. e.Handled = True
    145. End Select
    146. End Sub
    147. Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
    148. If TextBox2.Text = "" Then TextBox2.Text = "0"
    149. If TextBox2.Text > 59 Then TextBox2.Text = 0 ' Bestimmte max. hier 59 (für eine Uhr)
    150. If TextBox2.TextLength > 2 Then
    151. TextBox2.Text = TextBox2.Text.Remove(2, 1)
    152. End If
    153. End Sub
    154. Private Sub TextBox2_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
    155. Select Case Asc(e.KeyChar)
    156. Case 48 To 57, 8
    157. Case Else
    158. e.Handled = True
    159. End Select
    160. End Sub
    161. Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
    162. ProgressBar1.Value += 1
    163. End Sub
    164. End Class


    Ich hoffe das das nicht falch ist, also bei mir klappts ich habs jetzt aber nicht von a bis z durchgetestet, und du brauchst 2 TB ,TB1 für stunden, TB" für min.

    und Label, aber das findest du schon selbst ;)
    Differenz zwischen Startzeit und Endezeit berechnen (DateDiff !).
    Wert als Progressbar.Maximum eintragen. Progressbar auf Value=0 setzen
    Timer laufen lassen, der 1 Mal pro Sekunde "tickt"
    Im Tick den Progressbar.Value auf .Maximum - (Differenz aktuelle Zeit und Endezeit) setzen, solange aktuelle Zeit < Endezeit ist

    Nachtrach:
    @Annotator: Da weiß ich gar nicht, was ich zu deinem Code sagen soll ...

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private EndeZeit As Date
    3. Private Sub StartCountdown()
    4. If Now > EndeZeit Then Throw New Exception("Startzeit liegt nach EndeZeit")
    5. If DateDiff(DateInterval.Second, Now, EndeZeit) > Integer.MaxValue Then Throw New Exception("Maximale Zeit überschritten")
    6. TheProgressbar.Maximum = DateDiff(DateInterval.Second, Now, EndeZeit)
    7. TheTimer.Interval = 1000
    8. TheTimer.Start()
    9. End Sub
    10. Private Sub TheTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TheTimer.Tick
    11. If Now < EndeZeit Then
    12. TheProgressbar.Value = TheProgressbar.Maximum - (DateDiff(DateInterval.Second, Now, EndeZeit))
    13. Else
    14. TheProgressbar.Value = TheProgressbar.Maximum
    15. TheTimer.Stop()
    16. End If
    17. End Sub

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

    picoflop schrieb:

    Differenz zwischen Startzeit und Endezeit berechnen (DateDiff !).
    Wert als Progressbar.Maximum eintragen. Progressbar auf Value=0 setzen
    Timer laufen lassen, der 1 Mal pro Sekunde "tickt"
    Im Tick den Progressbar.Value auf .Maximum - (Differenz aktuelle Zeit und Endezeit) setzen, solange aktuelle Zeit < Endezeit ist

    Nachtrach:
    @Annotator: Da weiß ich gar nicht, was ich zu deinem Code sagen soll ...

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private EndeZeit As Date
    3. Private Sub StartCountdown()
    4. If Now > EndeZeit Then Throw New Exception("Startzeit liegt nach EndeZeit")
    5. If DateDiff(DateInterval.Second, Now, EndeZeit) > Integer.MaxValue Then Throw New Exception("Maximale Zeit überschritten")
    6. TheProgressbar.Maximum = DateDiff(DateInterval.Second, Now, EndeZeit)
    7. TheTimer.Interval = 1000
    8. TheTimer.Start()
    9. End Sub
    10. Private Sub TheTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TheTimer.Tick
    11. If Now < EndeZeit Then
    12. TheProgressbar.Value = TheProgressbar.Maximum - (DateDiff(DateInterval.Second, Now, EndeZeit))
    13. Else
    14. TheProgressbar.Value = TheProgressbar.Maximum
    15. TheTimer.Stop()
    16. End If
    17. End Sub
    hey..danke für deinen code....nur der funktioniert auch nicht. kannst du den code nicht so machen das ich ihn einfüge die elemente die du in deinem code benutzt hast in den designer ziehe und es dann funktioniert...ich werd aus deinem code nur nicht schlau deswegen kann ich ihn auch nicht abändern..

    lg

    picoflop schrieb:

    maxlcp schrieb:

    kannst du den code nicht so machen das ich ihn einfüge die elemente die du in deinem code benutzt hast in den designer ziehe und es dann funktioniert

    Auch noch Ketchup zu den Pommes?
    TheTimer und TheProgressbar dürfte wohl selbsterklärend sein. Der Rest steht über dem Code.
    ...also...dein code passt mal so gar nicht.....ich will eine endzeit die ich selbst angebe...(z.B. ne textbox) und zwar mit stunde:minute z.B. 15:40.....Und sobald ich auf einen Button klicke soll der jede Sekunde in einer Progressbar anzeigen wie lang es noch dauert bis der Interval von startzeit zu endzeit vorbei ist! Und am ende wenn es dann z.B 15:40 ist ist die progressbar bei 100 angekommen....und dein code passt einfach nicht und aus dem dadrüber werd ich auch net schlau
    Ich habs mit 2 Textboxen gemacht, TextBox1 für Stunden und Textbox2 für die Minuten

    @picoflot sorry aber ich mach das immer manuel ich kenn mich da mit der Berechnung nicht so aus.

    Edit: Ach ja hätt ich fast vergessen, die Progressbar füllt sich nach nem Timer d.h. wenn du 22:23:45 den timer startest wird die Progressbar nicht um 22:24:00 ein bisschen voller sondern erst um 22:24:45.

    Hab es mit nem größerem Zeitraum getestet und da funzt das auch, außerdem fällt das mit der Progressbar nicht so auf ^^ (Mach grad mit ner stunde und is perfeckt).nicht so aus.
    So ich hab nen Progressbarfehler gefunden: Der Code für Timer2 geht so:

    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
    Dim aab As Integer = ProgressBar1.Maximum - 1
    If ProgressBar1.Value = aab Then : Timer2.Stop() : Else : ProgressBar1.Value += 1 : End If
    End Sub


    PS: ich arbeitere noch an einem sinnvollerem Code ^^^^^^^^^^^^

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

    Hey...cool jetzt ist das Prinzip okay....die zeit läuft ab! Und das verhältnis stimmt auch....nur die progressbar läuft leider immer noch nicht mit...geil wäre wirklich wenn die sich immer bewegt...und je nachdem wie klein die zeitspanne dest so schneller ist sie....man soll sie wirklich anschaeun können uns sehen wie die zeit verinnt...so wie wenn man
    z.b den code hier nimmt: ProgressBar1.Value = ProgressBar1.Value + 1...nur eben auf die differenz zwischen start und endzeit bezogen

    LG
    Wie groß sind denn die Intervale so? Bei mehreren Stunden ist das ja in etwa gut so. Damit die Progressbar Dauerhaft läuft muss das Maximum relativ hoch sein, du must vom 2.Timer das interval auf 1 000 herunterschrauben und dann dasValue und das Maximum um das 60-fache erhöhen. Dann müsste jetzt die Progressbar sich stetig füllen und da ist der unterschied ja egal, denn der beträgt ja weniger als eine sekunde und das ist ja wohl nicht so schlimm ^^.

    Du kannst dann aber auch alles was unter Timer2 passiert in Timer1 reinpacken, denn beide haben denselben Interval und starten nach dem selben Ereignis (Buttonklick).
    ich sag nur "Ratio". Ein bisschen Mathe und fertig.

    beispiel: peter-hug.ch/lexikon/Ratio

    Und den meterlangen Code von Annonator ... Daran bitte kein Beispiel nehmen :thumbdown:

    Gruß %P%
    Hello World
    Also ich finde den Author ziemlich dreist, ist es nun normal, zu sagen "ich brauche dies und das, macht ihr mal"?
    wenn du selbst nicht auf die logik deines vorhabens kommst, dann lass es lieber sein oO es handelt sich hierbei um einfache Mathematik, die man als programmierer beherrschen sollte.

    @ pico, ja bitte aber majo, kein ketchup xD
    ?? sowas von feinarbeit, 1000 Zeilen code zu schreiben, für eine sache die sich in einer funktion automatisieren lassen könnte xD Aber gut, jedem seinen CodeStil ;)

    %P% :thumbup:
    Hello World