2014-11-01 2 views
1

Я делаю цифровые часы в графическом интерфейсе на C#. У меня есть 5 кнопок, 4 для конверсий часовых поясов и один для близких форм.C# button pause

Мой вопрос в том, что когда я нажимаю кнопку один (преобразование Центрального времени из моего системного времени), оно будет мигать в окне ярлыка в течение 1 секунды и вернуться к моему текущему системному времени.

В консоли я знаю, что для приостановки программы выполняется пауза. Как я могу использовать паузу, чтобы удерживать центральную кнопку времени в этой настройке, но сохранить таймер? Я открыт для использования нескольких форм.

Вот мой код для кнопки:

private void Central_Click(object sender, EventArgs e) 
{ 
    hr = DateTime.Now.Hour; 
    hr = DateTime.Now.Hour - 1; 
    min = DateTime.Now.Minute; 
    sec = DateTime.Now.Second; 

    if (hr > 12) 
     hr -= 12; 

    if (sec % 2 == 0) 
    { 
     time.Text = hr + ":" + min + ":" + sec; 
    } 
    else 
    { 
     time.Text = hr + " " + min + " " + sec; 
    } 
} 
+0

Итак, вы хотите, чтобы ваша программа спала в течение нескольких секунд, чтобы показать свои данные, а затем продолжить код? –

ответ

0

Если я правильно понимаю, может быть что-то, как это будет работать для вас:

private void Central_Click(object sender, EventArgs e) 
{ 
    // Here you could disable all the buttons 

    // endTime defines how long we will show this time zone (5 seconds) 
    var endTime = DateTime.Now.Add(TimeSpan.FromSeconds(5)); 

    while (DateTime.Now < endTime) 
    { 
     // Show the short time format (hh:mm:ss AM|PM) 
     var displayText = DateTime.Now.Subtract(TimeSpan.FromHours(1)).ToString("T"); 

     if ((DateTime.Now.Second % 2 == 1)) 
     { 
      // Every other second, hide the colons 
      displayText = displayText.Replace(":", " "); 
     } 

     time.Text = displayText; 

     // Sleep for one second 
     Thread.Sleep(TimeSpan.FromSeconds(1)); 
    } 

    // And here you can enable the buttons again 
} 

Еще одна вещь, следует отметить, что есть встроенные - в способах преобразования в другой часовой пояс. В принципе, вы получите UTC (универсальное) время, а затем преобразовать его в часовом поясе вы заинтересованы в код выше, могут быть преобразованы, чтобы использовать это как так:.

private void Central_Click(object sender, EventArgs e) 
{ 
    // endTime defines how long we will show this time zone (5 seconds) 
    var endTime = DateTime.Now.Add(TimeSpan.FromSeconds(5)); 

    while (DateTime.Now < endTime) 
    { 
     // Get UTC time 
     DateTime utcTime = DateTime.UtcNow; 

     // Convert it to Central Time 
     var displayText = TimeZoneInfo.ConvertTimeFromUtc(utcTime, 
      TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time")) 
      .ToString("T"); 

     if ((DateTime.Now.Second % 2 == 1)) 
     { 
      // Every other second, hide the colons 
      displayText = displayText.Replace(":", " "); 
     } 

     time.Text = displayText; 

     // Sleep for one second 
     Thread.Sleep(TimeSpan.FromSeconds(1)); 
    } 
} 
0

Ваш вопрос довольно неясно. Но я думаю, вы просто делаете обычные часы. Для этого вам нужно всего лишь сделать настройки часового пояса persist. Так что вам нужно магазина их в переменном уровне класса или два, может быть, как это:

TimeSpan correction = new TimeSpan(0); 
string zone = "ET"; 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    // display the corrected time with its name 
    time.Text = (DateTime.Now + correction).ToString("h:mm:ss ") + zone; 
} 

private void Central_Click(object sender, EventArgs e) 
{ 
    correction = new TimeSpan(-1, 0, 0); // set the hours of the new zone 
    zone = "CT";       // set its name 
} 

Я надеюсь, что у вас есть более хорошее имя для таймера, как и других имена, которые вы используете .. (Хотя я всегда включают в себя префикс, который показывает мне Тип управления ..)

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

Standard Date&Time patterns

Long time pattern

Если я не понял, что вы имеете в виду под «паузой», просим пояснить! Если возможно, вам не нужно действительно переключиться на новый часовой пояс, но покажите свое время на короткое время, вам просто нужно добавить 3 или 4 строки.:

Новая переменная, которая удерживает время, чтобы удерживать зону :

int secondsToHold = 0; 

Одна строка в щелчку, чтобы установить его на несколько секунд, вот я Cose 3 секунды:

secondsToHold = (int) (3 * 1000f /timer1.Interval); 

и, наконец, код в случае Tick для проверки и сброса varaibles:

if (secondsToHold > 0) secondsToHold -= 1; 
else { correction = new TimeSpan(0); zone = "ET"; }