最近帮朋友写了一个WM的程序,基本符合需求,已经初步通过验收,总结了一些经验或心得,记录一下,
Mobile开发和WinForm开发的区别,
之前一直是开发WinForm,在手机上一直是玩玩。来个窗口,再拖几个控件,没有正式写过超过千行的代码。因为使用C#写的,开始的时候以为在.Net环境下没有什么区别的,可以信手捏来,很快就能搞定,写起来才知道,还是有很多区别的。
1. Form就不同
只能满屏,不能任意大小,不能最小化,只有关闭和最小化到后台的区功能
2. DataGrid控件的不同
因为是数据库相关的,当然有DataGrid控件,这个空间局和WinForm上的差别很大。在WinForm中,指定条件改变颜色是很容易的,在这里就比较麻烦啦。刚开始,从CnBlogs上找了例子,可以改变行颜色,但编译后就出错,不能显示界面编辑窗口,编译后可以正常运行,现在都没有搞定,只有删除了,在代码中手工指定dataGridTableStyle1,
3.分辨率的不同
在WinForm中,还没有考虑过分辨率的问题,在WM中就出现问题啦,现在windowsMobile手机也是日新月异,现在有QVGA(240*320),WQVGA(240*400), VGA(480*640), WVGA(480*800)的,在模拟器中都有,我开始是开发的QVGA(240*320)的,朋友开始的PDA就是,我的手机也是,新买的就不是啦,朋友新买了两天HTC的WVGA(480*800)的,在vs中默认是可以自动适应分辨率的,一般的没有问题,但是有些地方需要移动空间位置的,如在好多录入窗口,需要充分考虑利用屏幕,在一些条件先要调节空间的位置,在分辨率240*320—>480*800后,在移动相等像素的位置,就出问题啦,在高分辨率屏幕上,就很不协调啦,
这是要考虑的地方
4.屏幕软键盘
在WinForm中,没有软键盘啦,在WM中,很多手机的软键盘是主要的录入手段,当开启软键盘时,窗口被覆盖了很大面积(尤其在较低分辨率,QVGA 240*320上,是相当大的一部分,在WVGA 480*800上相对较小)。刚开始没有注意这个问题,在朋友试用时再发现是个很大的问题,又修改的,哈哈。
5.数据库问题
在WinForm中就不讲啦,在WM中,看到书上或者网上有很多例子,都是cfSql的,我没有用过SqlServer,一直是Oracle数据库,我用的WCF中间层,这个问题不大,下一篇再具体代码。
这里的问题是,用到无线网络,朋友有较远距离的要求,不能保证实时连接正常,需要做本地处理。之前在WinForm程式中也有类此需求,我用的Access,处理上较为简单。在WM中就不行啦,我还没有找到可以应用Access的例子,好多倒是提到PacketAccess,都是WindowsCe的,没有WindowsMobile的,我从网上找了Db4o数据库,还是面向对象的数据库,号称一个.dll就可以运行起来,用了一下,还不错。
6.很菜的问题,
我没有找到怎么可以显示编译后exe版本的地方,就是右键属性,上边有版本信息,哈哈,太菜啦。
7.第3方控件较少,
在WinForm上有好多,像Developer Express v2009 ,ComponentOne系列的等等,还有好多老大写的单个的,在WM上就很少啦,想找个好用的DataGrid就很困难,我从网上搜了好久,有ComponentOne的(这个WinForm,Asp.Net,Mobile都有),Resco(一直没有找到可以用的破解版的,测试版的也不好用,好多控件一放到窗体上就报错),找了个ComponentOne的注册机,在CSDN上的前辈好强大,好多注册机,我已经收藏啦,现在上不了网,下篇代码时附上,
8.有图片时要注意
在启动窗口,我用了朋友相应的一张照片做启动画面,开始没有转换大小,在窗口上直接放上啦,当然可以自动缩放到适应大小,但是编译后exe就很大啦,有2M多,我还搜了好多压缩壳,看看有没有可以再Wm上用的,没有找到可以支持cfnet的,过了很久,才发现是照片太大啦,压缩成240*320的,编译后,100+K,又增加了好多代码,最终300+K,
9.程式文件夹
在WinForm时,有一些配置文件是在当前文件夹中存放的,如果不加上绝对路径,默认就是exe当前文件夹,在WM中默认的文件夹是 ‘我的设备’这个地方,是Windows,Program Files的父文件夹,exe当前文件夹要指定的,和WinForm中求exe当前文件夹有区别,好久前我用到啦,还写了一篇WM调用XML的文章发布在别的论坛,我找找在附上。在这个程序中,要配置的WCF地址等一些,我都写在注册表里啦,和WinForm的写法一样。
10.代码没有太大区别(写的都是调用数据库,显示数据,判断等,没用到太多函数)
11.访问WCF是有区别的,在下篇写具体代码。