2016-04-27 14 views
1

ich verwendet, um die folgende Zeile CodeWie aktualisiert man ein Etikett mit der aktuellen Uhrzeit?

int pp = DateTime.Now.Hour; 

und es ist in Ordnung. Ich schrieb

label1.text=pp.tostring(); 

zur Verifikation und es funktioniert, aber wenn ich meine Form bei 19:59 öffnen (eg.) In label1 erscheint 19 und nach einer Minute, wenn die Uhr 08:00 ist, wird der Wert in label1 nicht verändert und erscheint immer noch 19, nicht 20.

Danach, wenn ich das Formular schließe und es wieder öffne, ist die Nummer in label1 20.

Wie kann ich den Wert von datetime.now.hour in Echtzeit ändern, während das Formular ausgeführt wird? danke

+3

Ein Timer mit einem Tick-Ereignis? – LarsTech

+0

Sie benötigen einen Timer. Überprüfen Sie das Timer-Steuerelement. –

+0

Verwenden Sie einen Timer und aktualisieren Sie Ihre Benutzeroberfläche in ihrem 'Tick'-Handler (vorausgesetzt, dies ist eine WinForms-Frage). Oder führen Sie das Äquivalent in WPF oder der von Ihnen verwendeten UI-Bibliothek aus. – adv12

Antwort

3

Da Sie die „Form“ Terminologie verwenden, werde ich Windows Forms übernehmen, und der einfachste Weg, eine Timer Komponente würde hinzufügen, legen Sie eine angemessene Interval (angemessene Bedeutung , wie lange ist es das Maximum, das Sie sich leisten können, zu verzögern, wenn die Stunde ändert, bevor das Etikett ändert ... desto höher ist das Intervall, desto weniger CPU Ihren Prozess beschäftigen wird) auf, und auf seiner Tick Ereignis, tun Sie Ihre:

static void MyTimer_Tick(object sender, EventArgs e) 
{ 
    int pp = DateTime.Now.Hour; 
    label1.text=pp.tostring(); 
} 
2

Sie benötigen ein Timer zu implementieren, und seine Elapsed Ereignisaktualisierungzu haben. Einfach anrufen DateTime.Now.Hour ist nicht genug, wie das nur einmal aktualisiert. Es wird keine wiederkehrende Methode zum ständigen Aktualisieren festgelegt.

using System.Timers; 

namespace Example { 
    static Timer _timer; 

    static void Main() { 
     _timer = new Timer(1000); // Update every 1 second. 
     _timer.Elapsed += UpdateMyLabel; 
     _timer.Start(); 
    } 

    static void UpdateMyLabel(object sender, ElapsedEventArgs e) { 
     label1.Text = DateTime.Now.Hour; 
    } 
} 
1

würde ich die Label-Klasse ableiten und Zeitgeberablaufstatusbit verwenden Sie das Etikett für die Aktualisierung. Genau wie in OOP;)