前言:
最近,自己动手做了个Tcp的小程序,用于手机和台式机之间的局域网数据传输,说起这个来,总是要通过编写通讯类基础代码来实现(可以说是我的复用做的不够好),拿给别人用(主要是开发人员朋友)也是觉得不方便,所以到园子里,查了一些关于组件(Component)的资料,发现有一个不错哦,他的博文地址如下:http://www.cnblogs.com/mapserver/category/65343.html,说了很多.net组件编程的东西。当然,我的这几篇随笔也是参考他写的而来,只是被我移植到.net cf上面了。在此要感谢mapserver的分享!
在这一篇“基础”中,我就不再重复Mapserver的基础部分了,这里主要和大家分享一下我的一些经验,以免大家走了弯路。
正文:
首先,如何创建一个组件项目,我就不多说了,只需记得我们要用在.net cf下,应该从智能设备项目中开始创建类库即可!然后,将我们的类继承:Component,即可,当然,记得引用:using System.ComponentModel;
其次,我们再为组件添加属性时,那些PropertyAttribute标签,形如:[Category("Customer's Details"), Description("Customer's Sex")] 的东东,在.net cf中已经不复存在,那么如何让组件的属性(公开的),在设计时可见呢,如下图:
经过同仁指点,大家可以到这里看到解决办法,经过我的实验,果真通过:http://www.cnblogs.com/OSCAR_NJU/archive/2008/04/02/1134231.html,这就是为移动组件添加属性描述的方法。可谓经典啊!
说了这么多,可能已经有朋友,照着开篇的连接进入Mapserver的文章,并动手实验了一把,我也比较喜欢自己动手的,所以,下面我们就一步一步来,写一个基础的.net cf组件吧,组件的功能是Tcp连接测试(为了方便才使用这个话题,你可以换成你自己的东东呢)。
动手部分:
首先,还是新建一个智能设备项目,解决方案名称自定,然后选择WM5平台,用.net cf 2.0框架,项目类型请使用类库,名称就叫做“TCPComponent"吧,然后,修改默认的Class1.cs名称为:TCPHelper.cs,之后,在此文件的代码中,添加引用,以及让类继承Component。
using System.ComponentModel;
public class TCPHelper : Component
此时,你应该能发现,TcpHelper.cs的图标变成组件的样子了吧,反正不是原来的绿色的鸟~。好的,然后,让我们为组件添加公开的属性吧,主要有两个,第一个是远程主机的ip地址,在设计时以及运行时都能设置,其次是连接端口,我们在类的结构中申明这两个属性:
private String host;
private Int32 port;
#region 主机地址
/// <summary>
/// 远程主机地址
/// </summary>
public string HostName
{
get
{
return host;
}
set
{
if (value == null || value.Trim().Length == 0)
{
throw new ArgumentException("Invalid Host name.");
}
host = value;
}
}
#endregion
#region 端口号
/// <summary>
/// 通讯使用的端口号
/// </summary>
public int Port
{
get
{
return port;
}
set
{
if (value == 0 || value > 65535)
{
throw new ArgumentException("Invalid port Number.");
}
port = value;
}
}
#endregion
ok,编译一下,应该能通过了吧,然后在解决方案中,添加一个WM5的应用程序项目,应该能在工具箱上,看到TCPHelper这个带齿轮的组件,如果看不到,请右键单击工具箱,选择项——》然后手动添加组件的dll文件。
你会发现,把组件拖到设计界面上后,那些属性值居然没有描述,也没有分类,再参考上文提到的那篇文章后,我们右键点击组件项目的名字,选择“添加项”,在选择“设计时属性文件”,在这个文件中,我们添加如下信息:
<Class Name="TCPComponent.TCPHelper">
<DesktopCompatible>
true
</DesktopCompatible>
<Property Name="Port">
<Category>自定义</Category>
<DefaultValue>
<Type>System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</Type>
<Value>0</Value>
</DefaultValue>
<Description>此处设置远程主机的端口号,应该在1024至65535的范围内设定,测试时请和服务器端设为相同端口</Description>
<Browsable>true</Browsable>
</Property>
<Property Name="HostName">
<Category>自定义</Category>
<DefaultValue>
<Type>
System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
</Type>
<Value>192.168.1.1</Value>
</DefaultValue>
<Description>此处设置远程主机的IP地址,应该以4点分发进行输入,测试时请输入服务器ip地址</Description>
<Browsable>
true
</Browsable>
</Property>
</Class>
再编译一下,重新把工具箱中的组件拖入设计界面,是不是就有属性描述和分类了呢?如下图:
ok,这里基本上,就完成了一个基本组件的设置,在下一篇的随笔,我将介绍如何为组件添加方法,以及属性默认值的处理。