Mobile开发(列表控件使用)

      本文主要介绍一个国外牛人写的列表控件,我想Mobile开发中很多时候会用到它,而且我们还能在它的基础上修改变为自己需要的东西。由于部门有新的技术需要调研,发迟了,请朋友们见谅。

      还是先给大家附上控件代码,然后再详细介绍控件使用方法。Fontlist.zip

      控件分为两部分,其中OwnerDrawnListBox是继承Control然后重新封装的事件,属性,然后FontListBox再继承并且重新美观控件。所以使用该控件时,请结合上一篇文章中的绘制背景,因为控件中也需要使用绘制背景和图片的。既然有列表页,那肯定还有下级菜单,所以,列表中存储的信息肯定不止列表显示的那些信息,那就需要对象来支持了,大家使用时不要忘了。

      这里简单介绍一下FontListBox。

设置列表每一行的高度,根据绘制的字体大小而改变。

this.ItemHeight = (int)(g.MeasureString("模板"new Font("Tahoma"12, FontStyle.Regular)).Height * 2);

 根据对象数组的类别给与不同的图标显示,当然如果没有这个需求,可以删除,只需要绘制文字即可。这里绘制了一个图标,然后一段标题文字,描述当前列表内容。你可以根据需求,自己绘制。

Code

使用时注意替换到代码中的对象名称,两个文件都需要替换成你自己的对象名。

      下面是加载和刷新控件的用法。在对应的窗体声明一个全局的FontListBox对象和列表对象,然后加载控件以及委托事件。

Code

初始化列表:

Code

      完成上面几步,列表显示在您的窗体中了,这个控件支持触摸和键盘同时操作,事件大家可以改写为双击或者右键,滚动条会在列表太长的时候自动显示出来,总的来说还是比较好用。最后,列表的刷新需要稍微注意下,只能手动的移除控件再重新加载,效率比较低,还需要大家想办法再改进,如下:

 

Code

      最后,展现几张不同的列表展示图,愿大家的软件越来越实用,漂亮。

 

 

 

标签: mobile, .net, cf, list
posted @ 2009-06-15 17:50 Bright-Liang 阅读(3285) 评论(21) 编辑 收藏

 回复 引用 查看   
#1楼2009-06-15 19:26 | guojing      
最新的WM的系统,也就是6.5支持widget开发,一般的应用要比C#等更简单了,C#实现的效果太不方便了,内存也高,C/C++又太复杂,小东西不需要那么高的成本,建议你也可以看一下。

http://www.shangducms.com/category/Windows-Mobile.aspx

另外,你写的这个东西不错,原来一直想做一个。。

 回复 引用 查看   
#2楼2009-06-15 19:40 | Jake.NET      
不错,谢谢!
 回复 引用 查看   
#3楼2009-06-15 20:31 | peterzb      
不错, 收下了
 回复 引用 查看   
#4楼2009-06-15 21:16 | 王克伟      
@guojing
看来以后C++/C#/widget/...综合起来支撑应用开发啦。

 回复 引用 查看   
#5楼2009-06-15 23:50 | 边城浪      
不错..修改一下也可用来做九宫格.
 回复 引用   
#6楼2009-06-16 09:38 | 9949[未注册用户]
这个跟c#里的listview差别不大呀,能实实多行吗,即一条记录换行...?
 回复 引用 查看   
#7楼[楼主]2009-06-16 09:55 | Bright-Liang      
--引用--------------------------------------------------
guojing: 最新的WM的系统,也就是6.5支持widget开发,一般的应用要比C#等更简单了,C#实现的效果太不方便了,内存也高,C/C++又太复杂,小东西不需要那么高的成本,建议你也可以看一下。

http://www.shangducms.com/category/Windows-Mobile.aspx

另外,你写的这个东西不错,原来一直想做一个。。
--------------------------------------------------------
恩,widget做出来确实挺好,再过不久就会支持silverlight了,这些东西都整合到mobile里,可开发空间应该就更大一些了。

 回复 引用 查看   
#8楼[楼主]2009-06-16 09:58 | Bright-Liang      
--引用--------------------------------------------------
王克伟: @guojing
看来以后C++/C#/widget/...综合起来支撑应用开发啦。
--------------------------------------------------------
呵呵,现在开发不都是什么都要会。。。每天都要充电啊~

 回复 引用 查看   
#9楼[楼主]2009-06-16 10:00 | Bright-Liang      
--引用--------------------------------------------------
边城浪: 不错..修改一下也可用来做九宫格.
--------------------------------------------------------
额,九宫格我是另外用的一个控件。。。

 回复 引用 查看   
#10楼[楼主]2009-06-16 10:04 | Bright-Liang      
--引用--------------------------------------------------
9949: 这个跟c#里的listview差别不大呀,能实实多行吗,即一条记录换行...?
--------------------------------------------------------
用VS自带的控件当然好,关键是很多需求满足不了客户,只能写控件。我们虽然能引导客户,但有时候还是尽力满足客户需求的,因为这行业你是专家。

 回复 引用 查看   
#11楼2009-06-16 21:59 | 边城浪      
我添加了25个列表.在连续的切换列表项后..


方法:
public static AlphaImage CreateFromFile(string imageFileName)

factory.CreateImageFromFile(imageFileName, out alphaImage._image);
抛出 COMException 异常..
没有足够的存储空间来处理该命令。


 回复 引用 查看   
#12楼[楼主]2009-06-16 22:18 | Bright-Liang      
--引用--------------------------------------------------
边城浪: 我添加了25个列表.在连续的切换列表项后..


方法:
public static AlphaImage CreateFromFile(string imageFileName)

factory.CreateImageFromFile(imageFileName, out alphaImage._image);
抛出 COMException 异常..
没有足够的存储空间来处理该命令。


--------------------------------------------------------
恩,应该是手机内存不够了,手机没多大内存,尽量保持程序加载的内容精简,图片也别太大,特别是在模拟器上的时候。

 回复 引用 查看   
#13楼2009-06-16 22:31 | 边城浪      
再测试了一下.这应该是.NET CF 的垃圾回收不及时引起的.
以下两种方式可以解决
1 .把需要创建的AlphaImage 对象和 Image 对象定义为全局的.
只创建一次.

2在OnPaint的时候调用一次 GC.Collect();

期待楼主的九宫格.能发一个莫?

 回复 引用 查看   
#14楼2009-06-16 22:41 | 边城浪      
还有只要重写了 OnPaintBackground 就可以了.
里面不需要任何代码就可以防止屏闪..

 回复 引用 查看   
#15楼[楼主]2009-06-17 09:51 | Bright-Liang      
@边城浪
非常感谢你的支持,希望多多交流,大家一起进步,九宫格我会抽时间尽快发出来,不会私藏,技术分享才有进步嘛。

 回复 引用 查看   
#16楼[楼主]2009-06-17 16:14 | Bright-Liang      
--引用--------------------------------------------------
边城浪: 再测试了一下.这应该是.NET CF 的垃圾回收不及时引起的.
以下两种方式可以解决
1 .把需要创建的AlphaImage 对象和 Image 对象定义为全局的.
只创建一次.

2在OnPaint的时候调用一次 GC.Collect();

期待楼主的九宫格.能发一个莫?
--------------------------------------------------------
研究了一下,首先感谢提出的2个方法,其次建议采用第二个方法,控件中采用多数为GDI+相关对象,属于非托管资源,系统是不会自动回收的,需要手动回收。受益了,非常感谢。

 回复 引用   
#17楼2009-07-28 21:04 | 海石[未注册用户]
很强,收藏了。学习中,谢谢分享!

using LiveMesh.MeshService

在LiveMesh名字空间中 没有MeshService名字空间,所以MeshPicInfo没有定义,能将MeshService名字空间提供么?我是菜鸟,想学习一下,能发到我邮箱中么

谢谢

 回复 引用 查看   
#18楼2010-01-14 17:11 | Shine---阳阳      
不错 学习哈
 回复 引用 查看   
#19楼2010-01-15 14:33 | Shine---阳阳      
using LiveMesh.MeshService

我的 怎么 不能 引用呀 ? 能 告诉 我吗 ? 添加引用 中找不到 呀 ?



 回复 引用 查看   
#20楼[楼主]2010-01-19 15:14 | Bright-Liang      
引用Shine---阳阳:
using LiveMesh.MeshService

我的 怎么 不能 引用呀 ? 能 告诉 我吗 ? 添加引用 中找不到 呀 ?




额 不好意思 用的是项目代码 所有有些引用是可以注掉的 using LiveMesh.MeshService是一个service,完全可以不引用。

 回复 引用 查看   
#21楼2010-09-21 11:23 | zchin      
楼主
去掉了using LiveMesh.MeshService,可是MeshPicInfo就不能用啊,MeshPicInfo这个类是不是也可以共享一下。。。