30 Days of .NET [Windows Mobile Applications] - Day 01: Minutes to Midnight Countdown(午夜倒数器)

得到原作者 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 博客园 -- 精简开发 无线生活


作者:Jake LinJake's Blog on 博客园
出处:http://procoder.cnblogs.com
本文版权归作者所有,欢迎非商用转载,但未经作者书面同意必须保留完整的声明,且在文章页面明显位置给出原文连接,否则保留一切追究法律责任的权利。

更多精彩文章请看 Windows Phone,Windows Mobile,Windows Embedded CE(WinCE),.NET Compact Framework,Native C++开发系列(上百篇原创文章不断更新完善中)

 

0
0
(请您对文章做出评价)
« 上一篇:Windows Moible, Wince 使用.NET Compact Framework的进行蓝牙(Bluetooth)开发 之 蓝牙虚拟串口 (Bluetooth Virtual Serial Port)
» 下一篇:30 Days of .NET [Windows Mobile Applications] - Day 02: Bluetooth Manager(蓝牙管理器)
posted @ 2009-05-20 22:34 Jake Lin 阅读(1686) 评论(9)  编辑 收藏 网摘 所属分类: 移动开发系列

  回复  引用  查看    
#1楼2009-05-20 20:52 | 施炯      
这个系列的文章不错,呵呵。期待下一篇了。
  回复  引用  查看    
#2楼2009-05-20 21:52 | 马宁      
这个系列的确很不错,翻译过来很有价值。
支持楼主

  回复  引用  查看    
#3楼2009-05-20 22:21 | 王克伟      
看到Windows Mobile类文章我就笑了,加油!
  回复  引用  查看    
#4楼[楼主]2009-05-21 06:45 | Jake.NET      
@施炯
@马宁
@王克伟
谢谢支持。

  回复  引用  查看    
#5楼2009-05-21 09:05 | 一线风      
期待下文

  回复  引用  查看    
#6楼2009-05-21 10:36 | 和蔼的法海      
这个30 Days of .NET [Windows Mobile Applications] 我看了,他的c#实现部分不咋地,关于他的C实现部分还可以看看
  回复  引用  查看    
#7楼[楼主]2009-05-21 17:19 | Jake.NET      
@一线风
已经出来了,哈哈。

  回复  引用  查看    
#8楼[楼主]2009-05-21 17:24 | Jake.NET      
@和蔼的法海
您所谓的c#实现部分不咋地,不是说明CF.net可以很简单的开发实用的Window Mobile程序吗?
由于这些应用都不是很复杂,所以作为入门和熟悉Windows Mobile是很不错的材料。
本人仔细研读,从中也学习到不少东西,我写的文章不是简单的直接翻译,更多的是自己的思考与提高。

  回复  引用  查看    
#9楼2009-06-11 08:58 | Neville.Liu      
支持博主,不管别人怎么说,走自己的路,坚持下去。
同时也感谢你对其他认为有用的人作出的贡献。