得到原作者 Chris Craft 的同意,本人可以翻譯他的系列文章 30 Days of .NET [Windows Mobile Applications]並在部落格園裡發表。這是一個十分趣味性很高的系列,通過這個系列的學習,可以掌握Windows Mobile開發很多技巧,包括GPS,Bluetooth,介面編程,多線程等等。
在這個系列的文章,我不會逐句翻譯,而是討論需求的由來,對需求的分析思考,對實現的表述,以及對現有實現的改進想法,希望能成為原文的補充。第一篇文章是實現一個午夜倒數器。原文見 Day 01: Minutes to Midnight Countdown
需求
這個需求的由來,作者Chris Craft打算寫一個30 Days of .NET [Windows Mobile Applications]開發的系列文章,然後想到自己是否有決心寫完,每個人都自己的生活:家庭,朋友,事業,興趣已經夢想。每個人一天都有而且只有24小時,我們可以知道的是到底還有多少時間剩下在這一天。
其實很多時候,我們做事情光有想法,不付諸行動,或者行動中半途而廢。作者在開始的時候也懷疑自己是否有決心把事情做完,最終的結果顯示Chris Craft做到了,我希望也向Chris Craft學習,把這個系列的文章學一遍。如果你還是在Windows Mobile開發的門外徘徊,可以跟著這個系列每天學一點,想一點,不多也不少,開啟Windows Mobile開發精彩之門,感受個中樂趣。
準備工作
學習這個系列,需要安裝Visual Studio 2008和Windows Mobile 6 SDK。 Visual Studio 2008 Express 下載見 Visual Studio Express, Windows Mobile 6 SDK 下載於 Windows Mobile 6 Professional and Standard Software Development Kits Refresh。
實現
這些程式很簡單,關鍵運用了Timer,DateTime和進程條(Progress Bar)。
Timer是通過控制項使用的,所以回調時間在屬性裡進行配置,如下:
圖1
圖2
Interval設定為100表示每100毫秒回調一次timer_Tick(object sender, EventArgs e)。
private void timer_Tick(object sender, EventArgs e)
{
TimeSpan timeSpan = DateTime.Now.Date.AddDays(1) - DateTime.Now;
labelHours.Text = string.Format("{0} of 24 hours left", timeSpan.Hours);
labelMinutes.Text = string.Format("{0} of 60 minutes left", timeSpan.Minutes);
labelSeconds.Text = string.Format("{0} of 60 seconds left", timeSpan.Seconds);
labelTotalMinutes.Text = string.Format("{0} of 1440 total minutes left", timeSpan.TotalMinutes.ToString("#.0"));
labelTotalSeconds.Text = string.Format("{0} of 86400 total seconds left", timeSpan.TotalSeconds);
progressBarTotal.Value = 86400 - (int) timeSpan.TotalSeconds;
progressBarHours.Value = 24 - timeSpan.Hours;
progressBarMinutes.Value = 60 - timeSpan.Minutes;
progressBarSeconds.Value = 60 - timeSpan.Seconds;
progressBarTotalMinutes.Value = 1440 - (int) timeSpan.TotalMinutes;
progressBarTotalSeconds.Value = 86400 - (int) timeSpan.TotalSeconds;
}
這個回呼函數的演算法也很簡單,DateTime.Now.Date.AddDays(1)取出午夜的時間DateTime對象,然後和目前時間相減得到TimeSpan的對象timeSpan,從timeSpan的取出當前和午夜的時間差呈現到Label以及ProgressBar上。在total minutes left上,作者做了處理,因為有時候會顯示小數錯誤"X.666666666 of 1440 total minutes left".通過字串的格式化以後timeSpan.TotalMinutes.ToString("#.0"),顯示正常。
安裝檔案: minutes2Midnight.cab
原始碼: minuates2Midnight.zip
.NET Compact Framework, WinCE, Windows Mobile開發系列
Jake's Blog in 部落格園 -- 精簡開發 無線生活