2010-08-05 108 views
7

我看到了這個谷歌搜索它的變化,但我有一個窗體與計時器控制,三個文本框(小時,分鐘,秒)和基於點擊按鈕,我想從2小時倒數。所以右擊文本框1(小時)將是1,文本框2(分鐘)將是59,文本框3(第二個)將是59,他們將繼續倒計時直到所有讀取0.在C中倒計時的秒錶#

有沒有人有一些代碼分享?

非常感謝。

+3

你有什麼試過的?你有什麼想法?你是否因爲不知道如何在C#中做到這一點而陷入困境,或者因爲你不知道如何在僞代碼中做到這一點? – 2010-08-05 16:27:52

回答

3

您可以使用TimeSpan類。初始化爲2小時。如果啓動計時器,則獲取當前計時器。然後用Timer對象每秒刷新一次顯示。只需獲取當前時間。所以剩下的時間是:

TimeSpan remaining = twoHoursTimespan - (CurrentTime - StartTime);

3

從TimeSpan中提取組件。單擊按鈕後立即記錄當前時間和日期,並將其存儲在變量中。然後,每秒你的計時器應計算自開始時間以來的持續時間。

IE:DateTime result = DateTime.Now.Subtract(StartingTime);

然後,使用生成的TimeSpan的各個部分來填充字段。

IE:int Hour = result.Hour; (或類似的東西)。

附錄:不要每秒手動倒計時,因爲這很可能會導致倒計時不準確。

0

本教程很好地解釋了您要實現的目標。

http://www.dreamincode.net/forums/topic/57482-countdown-timer/

它可以讓你從任何給定的時間倒計時,而不是僅僅2小時選項。當然,如果這是您唯一需要的,您可以將其設置爲2小時。

+4

我會冷靜點你指向這種可憎的,但我今天心情很好:) – Diadistis 2010-08-05 16:32:13

+1

@Diadistis - 你在說什麼;)這是一個偉大的代碼示例;甚至下降到按鈕1,按鈕2等的默認按鈕名稱。 – 2010-08-05 16:43:03

+1

@Dadadistis我看了一篇文章,並認爲這是好的...但後來我看到了一些代碼,我同意!爲什麼他們使用Convert.ToInt32並捕獲異常,抱歉,捕獲異常 - int.TryPrase自2.0版本以來一直在這裏(我個人不喜歡「if(paused!= true)」,但不知道是否這是一個偏好的東西) – Samuel 2010-08-05 16:46:49

0

對不起,這可能不是確切答案,但您需要使用時間跨度來實現此目的。

DateTime now = DateTime.Now; 

// get the time elapsed since we started the test 
// start date was set somewhere else before this code is called 
TimeSpan span = now - _startDate; 

// format the time left 
String timeleft = span.Hours > 0 ? String.Format("Time Left - {0}:{1:D2}:{2:D2}", span.Hours, span.Minutes, span.Seconds) : String.Format("Time Left - {0:D2}:{1:D2}", span.Minutes, span.Seconds);