对复合控件的支持是.NET Compact Framework 2.0的新功能特性之一。创建复合控件就好比是在编辑控件,因为通常是通过组合Windows窗体控件来实现复合控件。复合控件由两部分组成:控件界面和控件逻辑。
创建复合控件
创建复合控件通常是通过组合Windows窗体控件来实现,因此控件的界面设计过程类似于窗体界面设计。要创建复合控件,可以在Visual Studio 2005里选择“控件库”模板。图8-1展示了Visual Studio 2005设计环境中一个新创建的复合控件的设计时界面。
图8-1所示的界面相当于窗体界面,用于定义复合控件自身的控件界面,可以根据需要改变该界面的大小。通过在该界面上拖放控件添加自定义复合控件的界面元素。图8-2演示了一个实现用户登录功能的典型自定义复合控件的设计时界面。

图8-1 空的复合控件 图8-2 实现用户登录的复合控件的设计时界面
复合控件的控件界面设计,根据实际需要可以比较简单也可以很复杂;复合控件的控件逻辑,根据实际需要同样可以比较简单也可以很复杂。图8-2所示的复合控件的控件逻辑一般包括输入用户名和密码后,单击“确定“按钮判断当前系统是否允许登录、加密密码,最后通过数据库检验登录用户身份的合法性4个步骤。
添加控件属性
创建复合控件后,可以给它添加属性以获得我们要求控件具备的功能。控件属性分两种,一种是普通的控件属性(Property),只能通过编程实现对属性的设置和访问,语法如下:
control.property = value
在该语法中:
·control表示控件的名称。
·property表示控件的属性。
·value表示为属性指定的值。
另一种是在设计时可见的设计时属性(Attribute),如图8-3所示MyProperty属性。
如图8-3所示的设计时可见的自定义属性,为开发人员提供了更加友好的属性访问方式。以MyProperty属性为例,添加设计时可见的自定义属性需要执行下列步骤:
(1)在解决方案资源管理器中,右击复合控件文件,例如UserControl1.vb,然后在弹出式快捷菜单上单击“查看类关系图”菜单项,打开类关系设计视图,如图8-4所示。
图8-3 设计时可见的自定义属性图8-4 类关系设计视图
(2)右击类关系设计视图,在弹出式快捷菜单上单击“类详细信息”菜单项,打开“类详细信息”窗口,如图8-5所示。
(3)在“类详细信息”窗口的“属性”部分中,在“<添加属性>”提示下,键入属性名称MyProperty。
(4)在“类型”列中,输入String类型。
(5)右击MyProperty所在行最左边的图标,然后在弹出式快捷菜单上选择“属性”菜单项。
(6)若要指定“自定义属性”的属性值,则在“属性”窗口中单击“自定义属性”项最左边的按钮,以打开“自定义属性”对话框,如图8-6所示。
图8-5 “类详细信息”窗口 图8-6 自定义属性的“自定义属性”对话框
(7)键入Browsable(true),单击“确定”按钮来设置该属性在设计时的属性窗口中可见。
(8)此时,可以在解决方案资源管理器中,查看包含该自定义属性的设计时属性.xmta文件DesignTimeAttributes.xmta。
(9)添加该属性的定义代码,清单8-1演示了该属性的定义代码。如果需要,也可以创建只读属性,清单8-2演示了只读属性的定义代码。
清单8-1 MyProperty属性定义代码
''' <summary>
'''复合控件测试属性
''' </summary>
''' <remarks>处理tb_Name.Text值</remarks>
Public Property MyProperty() As String
Get
Return Me.tb_Name.Text
End Get
Set(ByVal value As String)
Me.tb_Name.Text = value
End Set
End Property
清单8-2 只读属性定义代码
''' <summary>
'''复合控件只读属性
''' </summary>
''' <remarks>读取tb_Name.Text值</remarks>
Public ReadOnly Property MyRdyOnlyProperty() As String
Get
Return Me.tb_Name.Text
End Get
End Property
添加控件方法
不但可以自定义复合控件的属性,还可以添加自定义方法。自定义方法是为控件提供特定功能的函数或过程。调用自定义方法的语法如下:
control. method(args)
在该语法中:
·control表示控件的名称。
·method表示控件的方法。
·args表示方法的参数表。
以MyMethod方法为例,向复合控件添加自定义方法需要执行下列步骤:
(1)在解决方案资源管理器中,右击复合控件文件,例如UserControl1.vb,然后在弹出的快捷菜单上单击“查看类关系图”菜单项,打开如图8-4所示的类关系设计视图。
(2)右击该类关系图,在弹出的快捷菜单上单击“类详细信息”菜单项,打开如图8-5所示的“类详细信息”窗口。
(3)在“类详细信息”窗口的“方法”部分中,在“<添加方法>”提示下,键入方法名称MyMethod。
(4)在“类型”列中,输入String类型。
(5)添加该方法的定义代码,清单8-3演示了该自定义方法的定义代码。
清单8-3 MyMethod方法的定义代码
''' <summary>
'''复合控件测试方法
''' </summary>
''' <remarks>处理tb_Name.Text值</remarks>
''' <returns>""</returns>
Public Function MyMethod() As String
Return tb_Name.Text.Trim
End Function
使用复合控件
创建完复合控件之后将其汇编入一个DLL文件中,然后就可以在Pocket PC应用程序中引用该复合控件。下面是在Pocket PC应用程序当中引用复合控件的步骤:
(1)创建一个.NET Compact Framework 2.0窗体应用程序项目。
(2)为Pocket PC应用程序添加复合控件的引用。通过项目属性界面的引用标签页,添加包含复合控件的DLL文件。在如图8-7所示的“添加引用”对话框里选择目标DLL文件,单击“确定”按钮后DLL文件包含的复合控件自动添加到工具箱上。
(3)在工具箱中,找到自定义的复合控件,并将该复合控件拖放到窗体上。拖放窗体上的复合控件的设计时界面如图8-8所示。
图8-7 添加引用图8-8 窗体上的复合控件
(4)在“属性”窗口中,设置复合控件自定义属性。
(5)编写代码访问自定义属性和自定义方法。
复合控件的演示代码可以在配套光盘本章所对应文件夹的UserControlDemo项目中找到。