`
lovnet
  • 浏览: 6724814 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

WM有约(一):你好,CF

阅读更多

WM有约(一):你好,CF

Written by Allen Lee

来,和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打开后可以看到选中的日期都保存下来了:

图 13

你还想要什么?

"我不知道,但我随时都可能会有新的想法。"我不知道是否有办法在开始的时候就能收集到我的(绝)大部分需求,但相比之下,我更喜欢边做边用边修改的做法。我还想要什么呢?现在我的脑子里能想到的是:

  • 可以配置最大连续选择范围。
  • 可以配置允许选择的日期范围,比如说不能选择2008年10月17日之前的日期。
  • 过去的日期不能选择,比如说不能选择昨天。
  • 支持日期的排除,比如说2009年1月17日到2009年1月31日不能选。
  • (其它)

下一集,我们将会探讨如何实现这些需求。

分享到:
评论

相关推荐

    ORA-00904: "WM_CONCAT": 标识符无效

    oracle19c缺少的函数

    ORA-00904 WMSYS.WM_CONCAT标识符无效解决方案

    ORA-00904 WMSYS.WM_CONCAT标识符无效解决方案

    WMSYS.zip解决ORA-00904:

    -- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... -- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... -- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... ...

    WM8978.pdf

    WM8978主要特性: ●I2S接口,支持最高192K,24bit音频播放 ●DAC信噪比98dB;ADC信噪比90dB ●支持无电容耳机驱动(提供40mW@16Ω的输出能力) ●支持扬声器输出(提供0.9W@8Ω的驱动能力) ●支持立体声差分输入/...

    Oracle重建WMSYS用户及WMSYS.WM_CONCAT函数

    解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 在sqlplus中执行包里的owmctab.plb、owmaggrs.plb、owmaggrb.plb三个脚本即可。 简单来说,用PL/SQL执行下一下几个脚本就可以了。 特别要注意:PL/SQL登录时,要...

    WM8741-Arduino:Wolfson Micro WM8741 DAC 的 Arduino 库

    WM8741-Arduino v1.0.0 first releasev1.0.1 bugfix on getReg使用 I2C 总线的 Wolfson Micro DAC 的 Arduino 库。 这样做是为了在软件模式下管理 。 任何使用 WM8741 的电路板都会以相同的方式工作。特征立体声和双...

    WM8978中文资料.zip_8978文档_WM8978是_WM8979中文资料_wm8978_wm8978芯片资料

    WM8978是一个低功耗、高质量的立体声多媒体数字信号编译码器。它主要应用于便携式应用,比如数码照相机、可携式数码摄像机。 它结合了立体声差分麦克风的前置放大与扬声器、耳机和差分、立体声线输出的驱动,减少了...

    wm8510资料wm8510资料

    wm8510全部资料wm8510全部资料wm8510全部资料

    WM8325-00C:电源管理芯片.pdf

    WM8325-00C:电源管理芯片.pdf

    WM8978中文资料

    WM8978 是一个低功耗、高质量的立体声多媒体数字信号编译码器。它主要 应用于便携式应用,比如数码照相机、可携式数码摄像机。 它结合了立体声差分麦克风的前置放大与扬声器、耳机和差分、立体声线输 出的驱动,减少...

    Oracle 11g 重建WMSYS.WM_CONCAT函数

    Oracle10g之后有些版本已不包含WMSYS.WM_CONCAT函数,若用到此函数, 系统会提示异常:ORA-00904: "WM_CONCAT": invalid identifier 因此需单独重建此函数,方法如下: 解压附件,在sqlplus中执行包里的owmctab....

    基于.net的条码扫描源码(CF,WM)

    基于.net的条码扫描源码(CF,WM),一维码,二维码

    WM_CTLCOLOR和WM_CTLCOLOR有什么区别

    WM_CTLCOLOR和WM_CTLCOLOR有什么区别

    VC中的所有WM消息.doc

    1. windows消息WM_ 2. WM_NULL = $0000; 3. WM_CREATE = $0001; 4. 应用程序创建一个窗口 5. WM_DESTROY = $0002; 6. 一个窗口被销毁 7. WM_MOVE = $0003; 8. 移动一个窗口 9. WM_SIZE = $0005; 10. 改变一个...

    wm 虚拟键盘 wm 虚拟键盘

    wm 虚拟键盘 wm 虚拟键盘 wm 虚拟键盘

    WM_CLOSE、WM_DESTROY、WM_QUIT及各种消息投递函数详解

    本文对WM_CLOSE、WM_DESTROY、WM_QUIT及各种消息投递函数的功能及区别做出了分析比对,有助于读者更好的对消息投递函数加以理解。详情如下: 一、WM_CLOSE、WM_DESTROY、WM_QUIT区别 WM_CLOSE:关闭应用程序窗口 WM_...

    WM8960的数据手册

    WM8960的数据手册

    WM系统经典软件大全

    微软昔日的杰作WM系统,现在基本已经无人问津了,但是使用过这款系统的人都知道他的魅力所在,现在WM系统的软件少,好的软件更加少,这里是我使用2年WM系统积累的优秀软件大全,希望能对大家有所帮助

    中文版WM6手机模拟器

    很牛的,可以模拟出一台WM6的系统,可以执行很多东西~

    WM8740.pdf

    该WM8740是一个非常高性能立体声DAC 设计用于音频应用,如CD,DVD,家庭 影院系统,机顶盒和数字电视。该WM8740 支持数据输入字长从16到24位, 采样率高达192kHz。的WM8740由一个 串行接口端口,数字内插滤波器,多...

Global site tag (gtag.js) - Google Analytics