Uhrzeit anzeigen

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Lupus.

    Uhrzeit anzeigen

    Hallo,

    ich möchte in einer meiner anwendung des layout etwas pimpen.

    Dazu möchten ich unteranderem das datum und die Uhrzeit anzeigen (in einem Label).

    Mir ist schon klar wie ich an das Datum und das label komme.

    Aber wie mache ich das das die Uhrzeit jede Minute aktualisiert wird. Das also der Wechsel einer Minute angezeigt wird. Wenn ich im Show ereignis das reinpacke adann wird ja nur einmal die uhrzeit geholt. Ich lönnte das versuchen mit nem timer zu machen der alle 60 sek. ticked, aber ich finde das 1. nicht genau 2. nicht wirklich leitungssparend und 3. nicht wirklich elegant. Fällt euch da etwas ein?????
    hm ich vermute um einen Timer wirst du nicht herumkommen. Aber ansich hab ich zumindest bei jedem Prorgamm einen Timer, der alle Sekunde oder so "tickt", und dann dort einige Dinge prüft oder ausführt. Und so viel Leistung braucht ein Timer auch nicht...
    Kann man nicht einfach die Uhrzeit jede Sekunde aktualisieren?

    VB.NET-Quellcode

    1. Private Sub Form_Load()
    2. ' lblDatum und lblUhrzeit sind Bezeichnungsfelder
    3. Me!lblDatum.Caption = "Datum : " & Date
    4. Me!lblUhrzeit.Caption = "Uhrzeit : " & Time
    5. End Sub
    6. Private Sub Form_Timer()
    7. Me!lblUhrzeit.Caption = "Uhrzeit : " & Time
    8. End Sub


    Bei Access geht doch =Time() , dann einfach das Zeitgeberintervall 1000, die Ereignisprozedur:

    Me.Refresh
    das is alles nen bisschen anders hier, vb machts nichts, ohne das du ihm sagst, mach das jetz, und selbst dann nur einmal...eben nur das, was du auch willst( so wie es sein soll)

    1: ein timer, indem du dir einfach die systemzeit holst, entweder, sekunde für sekunde, um es genau zu haben, oder eben einmal alle 60 sekunden, jedoch sehr ungenau :P und auch totaler schwachsinn

    ein timer ist nicht so belastend, wie lupus schon sagte
    solange es nicht zu viele werden, und der code, der darin enthalten nicht zu komplex wird, merkt man diesen timer kaum, desweiteren wird er paralell zum restlichen code ausgeführt, behindert also nicht das programm selbst.

    2: me refresh bewirkt einfach nur, das deine form neu geladen wird, sprich neu gezeichnet wird, um aktualisierungen zu bekommen, natürlich kannst du den code, um die zeit zu holen auch in das form1_paint ereigniss schreiben, und das mit me.refresh aufrufen, jedoch brauchst du auch da wieder einen timer, der dann me.refresh aufruft :P

    also nimm den timer :)
    Ich glaube das Interval kannst du auch 60000 setzten. Wenn nicht dann halt auf 1000 und eine Variable jede Sekunde zählen und wenn die 60 ist, wird deine Uhrzeit aktuallisiert.

    VB.NET-Quellcode

    1. Dim iSekunde as Integer = 0
    2. Private Sub Form_Timer()
    3. If iSekunde = 60 Then
    4. lblUhrzeit.Caption = "Uhrzeit : " & Time
    5. iSekunde = 0
    6. Else
    7. iSekunde += 1 ' wenn das so nicht funktioniert mit += 1 musst du es so machen iSekunde = iSekunde + 1
    8. End If
    9. End Sub
    er musst doch gar nicht zählen....es reicht doch, wenn er sekundlich die aktuelle systemzeit ausliest, für was gibts denn

    VB.NET-Quellcode

    1. TimeofDay


    :P
    das reicht doch vollkommen aus :P

    es sogar ein nachteil, wenn er selbst zählt, weil der interval 1000 nur "ungefähr" eine sekunde ist, lass mal einen timer ne halbe stunde laufen, und du wirst merken, das es immer zu abweichungen kommen wird :P
    Das der Timer nicht genau läuft weiß ich, aber die gezählen skeunden dienen ja nur zur aktuallisierung und wenn die volle Minute nicht 100%ig zeitgleich sondern paar sek versetzt angezeigt wird.

    Aber stimmt sek zählen is unsinn, am besten die Uhrzeiten miteinander vergleichen, wenn die aktuelle Uhrzeit ungleich der Uhrzeit des Labels ist, wird das Label aktuallisiert.
    genau darauf wollt ich hinaus, jedoch kann er sich die abfrage ersparen :P

    denn mit der abfrage, muss er
    1: den string im label abfragen
    2: die systemzeit holen
    3: beide vergleichen
    4: gegebenfalls labelzeit ersetzen


    das is viel zu viel arbeit :P

    es reicht wenn er einfach sagt, labelzeit ist systemzeit, fertig :P

    es ist macht zwar hier bei einer abfrage keinen unterschied, aber stell dir mal vor, du hast 100 solcher abfragen, die sekündlich geprüft werden
    da merkt mans dann :P
    Nunja klar kann er 59 mal in der Minute die gleiche Uhrzeit in das Label schreiben. Aber die Erfahrung die ich bisher gemacht habe, bei solchen aktuallisierungen wo sich nichts ändern, fängt das Label an zu flackern. Gut das war damals bei VB6 öfters so und die PCs sind schneller jetzt. Aber ich habs mir trotzdem angewöhnt, etwas nur bei Änderung anzeigen zu lassen.
    Wenn die Form z.B. noch was anderes zeit intensives macht und dann der Timer dazwischen funkt und das Label aktuallisiert, könnte ich mir denken das es evtl flackern könnte.
    also ich hab damit keine problem....jedoch machts ja kein unterschied, ob er nun jede sekunde ne abfrage ausführt, oder einfach gleich das macht, was gemacht werden soll :P

    nen form flackern hab ich nur, wenn ich me.refresh zu oft mache :P
    aber er kann ja auch label.refresh nehmen, das is der form dann nämlich total egal :)
    aber er braucht refresh ja gar nicht :)

    schun komisch das wir uns hier so über ne kleinigkeit unterhalten :P
    Man könnte auch nen Asynchronen Thread starten, der mit hilfe einer Stapwatch die Zeit misst und entsprechend über ein invoke auf steuerelemente zugreift ;)

    Aber ja ein Timer auf den Intervall 60k stellen ist wohl die einfachere Variante. Ich weiß allerdings nicht wie genau der Timer ist, wenn der plötzlich nach 59500ms schon losgeht hat man halt das Pech, das eine Minute nicht aktualisiert wird.
    Also der Timer ist glaube ich eher zu langsam, also wird er bei >60k ausgelöst. Problem beim Timer ist auch wenn du die Form anfässt, z.b. beim Bewegen, wird der Timer angehalten, was natürlich zu einem versatz führt.
    Denke also Interval 1000ms wird hierbei am sinnvollsten sein und dann halt aktuallisieren mit oder ohne abfrage, jenachdem wie der Threadersteller das möchte =)
    öhm...also das ist glaube ich nicht ganz richtig

    wenn du eine form verschiebst, klickst etc...bleibt der timer nicht stehen, da er wie schon erwähnt, paralell zu allem anderen im programm läuft..das einzige was passiert, wenn das programm mal etwas stockt, oder einen intensiven code durchlauft, das der timer nichtmehr sekündlich angesprochen wird, weil das programm einfach nichtmehr dazu komm
    gut kann sein dass es bei VB 2k8 nimmer ist, zumindest war es bei VB6 immer so. Wenn ich ein Timer der im Interval 1000ms in einem Label was erhöht hat und ich die Form dann "angefasst" habe, war der komplette Code gestoppt, auch der Timer und im Label wurde nichts mehr erhöht, bis die die Form wieder losgelassen habe, dann liefs weiter als ob nichts gewesen wäre.
    Ist sehr schön, dass es nun anscheint nichtmehr so ist, das macht mir mut ^^
    Habe auch einen Weg gefunden
    Man benötigt:
    1.Einen Timer Intervall = 1000
    (evtl. Ein Lable)

    Variable definieren:
    Dim ThisMoment As Date
    In das Form Load Ereignis reinschreiben:
    Timer1.Start()
    ThisMoment = Now
    In den Timer reinschreiben:
    '1.Moglichkeit:
    Me.Text = "Datum/Uhrzeit " + Now '(dann wird der Formname zum Datum der text in "" kann variieren)
    '2.Moglichkeit:
    Lable1.Text = "Datum/Uhrzeit " + Now