Entwickler-Ecke
WinForms - Zeit aktualisieren
Ccenter - Fr 25.09.09 21:51
Titel: Zeit aktualisieren
Hi,
ich habe ein Problem:
Ich habe ersteinmal ein Timer eingesetzt dessen Interval 1000 beträgt.
So, wenn man das Programm startet, wird die aktuelle Zeit ermittelt mit
C#-Quelltext
1: 2: 3: 4:
| private void label1_Paint(object sender, PaintEventArgs e) { this.label1.Text = DateTime.Now.Hour.ToString() + ":" + DateTime.Now.Minute.ToString() + ":" + DateTime.Now.Second.ToString(); } |
und in einem Label ausgegeben. Leider wird die Zeit nicht akualisiert und hier liegt auch mein Problem. Wie lässt sich sowas realisieren?
Ich habe es schon mit einer Schleife probiert aber das haut irgendwie nicht hin. Desweiteren habe ich irgendwo etwas von einem "Tick-Event" gelesen, aber nichts genaueres dazu gefunden, z.b. wie man das verwendet.
jaenicke - Fr 25.09.09 23:37
Du sagst etwas von einem Timer, aber warum benutzt du diesen denn dann nicht?
Das Ereignis Paint des Labels wird genau dann ausgelöst... zum Zeichnen. ;-)
Und genau wie dieses Ereignis musst du das Ereignis Tick des Timers benutzen. Dieses wird in dem eingestellten Intervall immer wieder ausgelöst.
Ccenter - Sa 26.09.09 13:55
Hm...ok ich dachte immer das "DateTime.Now" nur funktioniert, wenn der Timer eingesetzt ist.
Ich verstehe aber nicht ganz, was ich jetzt mit dem Tick-Event des Timers machen muss.
Bezüglich dem Paint-Event des Labels, ist das falsch?
Christian S. - Sa 26.09.09 14:02
Ccenter hat folgendes geschrieben : |
Ich verstehe aber nicht ganz, was ich jetzt mit dem Tick-Event des Timers machen muss.
Bezüglich dem Paint-Event des Labels, ist das falsch? |
Ja, das mit dem Paint-Event ist nicht richtig. Das hieße, dass Du den Text des Labels bei jedem Neuzeichnen setzt, was keinen wirklichen Sinn macht. Das passiert entweder zu oft oder zu selten, aber nicht sekündlich ;-)
Das Tick-Event ist die Lösung für Dein Problem: Du setzt im Tick-Event den Inhalt das Labels. Den Timer stellst Du auf ein vernünftiges Intervall, wobei 1000ms für eine sekundengenaue Anzeige schon zu lang ist, denn je nach Startzeitpunkt des Timers hast Du dann bis zu 999ms zu spät die korrekte Uhrzeit.
Ccenter - Sa 26.09.09 14:39
Ok, der Timerinterval ist jetzt auf 100.
Das mit dem Ticker verstehe ich aber noch nicht so ganz. Denn das hier ist ja wohl falsch:
C#-Quelltext
1: 2: 3: 4:
| private void timer1_Tick(object sender, EventArgs e) { Label1.Text = DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second; } |
Zumindest funktioniert es nicht.
Christian S. - Sa 26.09.09 14:53
Ist der Timer denn aktiviert (Enabled = true)?
Ccenter - Sa 26.09.09 16:07
Ah es geht. Vielen dank^^
Ich hatte den Timer nicht auf True gesetzt.
JüTho - Sa 26.09.09 17:36
Hallo,
Die Zuweisung der Uhrzeit an das Label ist zwar nicht wirklich falsch, aber ungünstig.
Label.Text ist vom Typ
String;
DateTime.Hour usw. sind vom Typ
Integer. Der Compiler kann das zwar automatisch konvertieren; im Interesse eines typgenauen Arbeitens sollte aber "String = String" und nicht "String = int" verwendet werden. Dafür bietet DateTime schöne Routinen mit vielen Überladungen, wo du dir eine passende aussuchen kannst:
C#-Quelltext
1: 2: 3:
| currentTimeLabel.Text = DateTime.Now.ToShortTimeString(); currentTimeLabel.Text = DateTime.Now.ToString("T"); |
Erläuterungen siehe in der
SDK-Doku/MSDN unter
DateTime, DateTime.ToString-Methode mit Überladungen,
DateTimeFormatInfo.
Jürgen
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!