Autor Beitrag
Ccenter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

Win7
C#
BeitragVerfasst: Fr 25.09.09 21:51 
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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

Win7
C#
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 26.09.09 14:02 
user profile iconCcenter hat folgendes geschrieben Zum zitierten Posting springen:
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.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Ccenter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

Win7
C#
BeitragVerfasst: 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:

ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 26.09.09 14:53 
Ist der Timer denn aktiviert (Enabled = true)?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Ccenter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

Win7
C#
BeitragVerfasst: Sa 26.09.09 16:07 
Ah es geht. Vielen dank^^
Ich hatte den Timer nicht auf True gesetzt.
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
2:
3:
currentTimeLabel.Text = DateTime.Now.ToShortTimeString();
// oder 
currentTimeLabel.Text = DateTime.Now.ToString("T");

Erläuterungen siehe in der SDK-Doku/MSDN unter DateTime, DateTime.ToString-Methode mit Überladungen, DateTimeFormatInfo.

Jürgen