首页 > Linux操作系统 > Linux操作系统 > WM有约(一):你好,CF
转载在这个系列里,我将会使用Visual Studio 2008来创建Windows Mobile 6 Professional应用程序,如果你也想在自己的计算机上体验一下,那么请先安装Visual Studio 2008和Windows Mobile 6 Professional SDK。 图 1 创建一个新的项目,接着选择Visual C#\Smart Device\Smart Device Project项目模板,然后输入项目名称,最后单击OK打开Add New Smart Device Project对话框: 图 2 在Add New Smart Device Project对话框里,选择Windows Mobile 6 Professional SDK作为目标平台,选择.NET Compact Framework Version 3.5作为目标平台上运行的CF的版本,选择Device Application作为项目模板,单击OK完成项目的创建: 图 3 在继续之前,让我们先把目标设备设为Windows Mobile 6 Professional Emulator,把Form1的FormFactor属性设为Windows Mobile 6 Professional: 图 4 图 5 好了,我们可以把目光投向Form1了。现在,把一个Label拖到Form1上,接着把它的Text属性设为"Hello, CF!",然后调整一下它的位置和对齐方式: 图 6 一切就绪之后,就可以单击Start Debugging了,此时,你会看到Deploy Alt对话框,请确保你所选择的是Windows Mobile 6 Professional Emulator,然后单击Deploy: 图 7 在部署Alt之前,Visual Studio 2008会检查目标设备上是否部署了.NET Compact Framework 3.5,如果没有,它会先部署.NET Compact Framework 3.5,再部署Alt。一切顺利的话,你将会看到运行在模拟器上的Alt: 图 8 等一下!谁要这种东西啊? 那么,你想要的是什么? 首先,把中间那个Label删除,在Form1的正中放一个MonthCalendar。接着,给Form1添加Pin和Save两个菜单项。我想要的界面大致如下: 图 9 当我选中某天并单击Pin时,MonthCalendar中的那天就会加粗;当我选中连续的几天并单击Pin时,MonthCalendar中的那几天都会加粗;而当我选中某个周六时,MonthCalendar中的那个周六及其相邻的周五和周日都会加粗。当我单击Save时,MonthCalendar中所有加粗的日期都会保存下来,每次启动应用程序时,保存的日期将会在MonthCalendar上加粗显示。 钉住日期 当选中的日期是周六时,我们可以计算它的前一天和后一天,接着把它们添加到某个用来储存选中日期的集合里,然后把这个集合里的日期关联到MonthCalendar的BoldedDates属性上: 代码 1 而对于另外两种情况,我们可以统一处理。当我们选中连续的几天时,MonthCalendar并非告诉我们具体是哪几天,而是通过SelectionStart和SelectionEnd两个属性告诉我们首尾两天,中间的日期需要我们自己计算。如果SelectionStart和SelectionEnd两个属性是同一天,那就意味着只选中一天。于是,我们可以这样: 代码 2 有了PinWeekend和PinRange两个方法,我们就可以处理Pin的Click事件了: 代码 3 保存选中的日期和读取保存的日期 假设用来保存日期的文件和应用程序放在同一个文件夹里,那么我们可以通过下面代码获取文件的路径: 代码 4 要把一组日期保存到文件里,我们可以这样: 代码 5 而要读取文件里的日期,我们可以这样: 代码 6 那么,我们在什么时候调用这两个方法呢?我们知道,Form1上有一个Save菜单项,当用户单击这个菜单项的时候,我们应该调用SavePinnedDates方法: 代码 7 另外,当用户关闭应用程序时,我们也应该调用SavePinnedDates方法: 代码 8 你可能会问:"为什么不用Closing事件?"这是因为当我们单击窗体右上角的交叉时,应用程序实际上只是最小化到后台而不是关闭,此时触发的是Deactivate事件。 至于日期的读取,我们可以在Form1的Load事件触发时执行: 代码 9 还差什么呢?嗯,或许你已经想到了,当应用程序第一次运行的时候,用来保存日期的文件并不存在,而此时应用程序却要从这个文件中读取数据,那将会引发异常。对于这个问题,我们有两个应对措施,一个是每次启动应用程序的时候检查这个文件是否存在,如果不存在就创建一个空白的文件;另一个是在应用程序的安装程序里包含一个空白的文件,安装应用程序的时候把这个文件一并安装到应用程序文件夹里。这两种方案各有利弊,这里我选择第一种方案(我这样做并没有什么特别的理由,只是想这样做而已): 代码 10 这个方法将会在Form1的构造函数里调用: 代码 11 模拟运行 接下来就是在模拟器里运行这个应用程序,步骤大体上和前面的"Hello, CF!"类似,你要做的只是单击Start Debugging。噢,天哪,应用程序的主窗体都还没出来就抛了个异常: 图 10 原来,我没有释放InitializeFile方法里创建的文件,GC也没来得及帮我"擦屁股",所以当LoadPinnedDates方法试图读取文件的时候就出错了。知道问题的症结就好办了: 代码 12 重新执行调试,你将会看到应用程序的主窗体: 图 11 试一下钉住日期的功能: 图 12 基本上可以过关,但有一个小问题,就是最多只能连续选中7天,这个问题可以通过修改MonthCalendar的MaxSelectionCount属性来解决。 单击Save之后,通过资源管理器找到PinnedDates.txt文件,用Word Mobile打开后可以看到选中的日期都保存下来了: |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/750152/viewspace-694912/ ,如需转载,请注明出处,否则将追究法律责任。