Как отобразить обновленное время как системное время на метке, используя c #? - PullRequest
7 голосов
/ 17 февраля 2011

Я хочу отображать текущее время на этикетке с помощью C #, но время будет постоянно меняться при изменении системного времени.Как я могу это сделать?

Ответы [ 7 ]

12 голосов
/ 17 февраля 2011

Добавьте в форму новый элемент управления Timer, который называется Timer1, установите интервал 1000 (мс), затем дважды щелкните элемент управления Timer, чтобы изменить код для Timer1_Tick, и добавьте этот код:

this.label1.Text = DateTime.Now.ToString();
8 голосов
/ 17 февраля 2011

Добавьте элемент управления Timer, который срабатывает один раз в секунду (1000 мс).В событии Tick этого таймера вы можете обновить метку с текущим временем.

Текущее время можно получить с помощью чего-то вроде DateTime.Now.

7 голосов
/ 17 февраля 2011

Вы можете добавить таймер и указать его для 1000 миллисекундный интервал

  private void timer1_Tick(object sender, EventArgs e)
    {
        lblTime.Text = DateTime.Now.ToString("dd-MMM-yyyy hh:mm:ss tt");
    }
6 голосов
/ 17 февраля 2011

Попробуйте следующий код:

private void timer1_Tick(object sender, EventArgs e)
{
    lblTime.Text = DateTime.Now.ToString("hh:mm:ss");
}
4 голосов
/ 08 июля 2015

Вы должны также включить таймер, либо в коде, либо в окне свойств.

в коде, пожалуйста, введите следующее в разделе загрузки формы:

myTimer.Enabled = true; 
myTimer.Interval = 1000;

После этого убедитесь, что ваше событие таймера похоже на следующее:

private void myTimer_Tick(object sender, EventArgs e)
{
    timeLabel.Text = DateTime.Now.ToString("hh:mm:ss");            
}
0 голосов
/ 01 ноября 2016
private int hr, min, sec;

public Form2()
{
    InitializeComponent();
    hr = DateTime.UtcNow.Hour;
    min = DateTime.UtcNow.Minute;
    sec = DateTime.UtcNow.Second;
}

//Time_tick click
private void timer1_Tick(object sender, EventArgs e)
{
    hr = DateTime.UtcNow.Hour;
    hr = hr + 5;
    min = DateTime.UtcNow.Minute;
    sec = DateTime.UtcNow.Second;

    if (hr > 12)
        hr -= 12;

    if (sec % 2 == 0) 
    {
        label1.Text = +hr + ":" + min + ":" + sec; 
    }
    else
    {
        label1.Text = hr + ":" + min + ":" + sec;
    } 
}
0 голосов
/ 13 ноября 2015

Поскольку интервал таймера не точен, ваше обновление может быть плохо синхронизировано и будет дрейфовать относительно фактического перехода секунд.В некоторых случаях вы будете отставать или перед переходом и пропускать обновления на вашем дисплее времени

Вместо того, чтобы опрашивать на высокой частоте, чтобы запускать обновление при изменении секунд, этот метод может дать вам некоторое уважение.

Если вам нравятся регуляторы, вы можете отрегулировать свое обновление времени так, чтобы оно было безопасно расположено через 100 мс после фактического второго перехода, отрегулировав таймер 1000 мс с помощью свойства миллисекунды временной метки, которую вы хотите отобразить.

В коде события таймера сделайте что-то вроде этого:

//Read time
DateTime time = DateTime.Now;

//Get current ms offset from prefered readout position
int diffms = time.Millisecond-100;

//Set a new timer interval with half the error applied
timer.Interval = 1000 - diffms/2;

//Update your time output here..

Следующий интервал таймера должен сработать ближе к выбранной точке через 100 мс после перехода в секундах.Когда при переходе + 100 мс ошибка будет переключаться +/-, сохраняя вашу позицию считывания во времени.

...