移动设备应用程序开发入门3:为设备创作用户控件并添加属性
目标:1.创建一个控件库以及一个要放入该库中的用户控件。用户控件是单个可重用单元中的 Windows 窗体控件的组合,自定义控件是需要无法通过标准控件实现的 UI 或功能的控件,您应当将两者区分开来。
2.向设备项目中的用户控件添加属性。具体地说,添加使控件属性 (property) 在设计时可见的自定义属性 (attribute)。您可能希望在项目中添加此功能以防止属性值被更改。
该过程与桌面过程相似,不同之处在于设备项目将此信息存储在单独的元数据文件 (.xmta) 中。
创建控件库和控件
-
(Visual Basic) 在“文件”菜单上单击“新建项目”。
- 或 -
(Visual C#) 在“文件”菜单上指向“新建”,然后单击“项目”。
-
在“新建项目”对话框的“项目类型”窗格中,展开“Visual Basic”或“Visual C#”,然后单击“智能设备”。
如果开始并未出现您需要的语言,请展开“其他语言”。此显示由开发设置控制。
-
在“模板”窗格中单击“智能设备项目”。
-
在“名称”框中,键入“ctlDevClockLib”,然后单击“确定”。
-
(仅限 Visual C#)在“位置”框中,验证要用于存储项目文件的位置,然后单击“确定”。
-
在“目标平台”下拉列表中,选择“Pocket PC 2003”。
-
从“.NET Compact Framework 版本”下拉列表中选择“.NET Compact Framework 2.0 版”[.NET Compact Framework Version 2.0]。
-
单击“模板”窗格中的“控件库”,再单击“确定”。
此时会显示“组件设计器”。
您已经指定了项目名、根命名空间和程序集名称 (ctlDevClockLib)。但是,项目中的组件具有由 Visual Studio 分配的默认名称(例如,“UserControl1”)。通常,你需要将这些名称更改为更有意义的术语。
重命名该库和控件
-
在“解决方案资源管理器”中,右击“UserControl1.vb|cs”,再单击“属性”。
-
将“文件名”更改为“ctlDevClock.vb|cs”。
-
(仅限 Visual C#)在询问是否要重命名对此代码元素的所有引用的消息框中,单击“是”。
“属性”窗口中的名称更改现在传播到了其他引用,如类名和构造函数。
接下来,从“工具箱”中添加组件,以便为您的用户控件提供功能和用户交互。在本演练中,您添加一个访问系统时间的“计时器”控件和一个显示时间的“标签”控件。
添加组件并更改它们的属性
-
在“工具箱”中,双击“标签”。
将向“组件设计器”中的用户控件添加一个标签控件。
-
在该标签控件的“属性”窗口中,执行下列操作:
属性
更改为
Name
lblDisplay
Text
(空白)
TextAlign
TopCenter
Font.Size
14
-
在“工具箱”中,双击“计时器”。
组件栏中会出现一个“计时器”控件。
-
在该计时器控件的“属性”窗口中,执行下列操作:
属性 (Property)
更改为
Interval
1000
Enabled
True
在下面的步骤中,添加一个事件处理程序,以便在“标签”控件中显示时钟计时周期。
添加事件处理程序
-
在组件栏中,双击“Timer1”(Visual Basic) 或“timer1”(C#),以打开代码编辑器并定位至该计时周期事件。
-
插入下面的事件处理代码:lblDisplay.Text = DateTime.Now.ToLongTimeString();
-
将访问修饰符从 Private 更改为 Protected 并添加 Overridable 关键字,使处理程序代码如下所示:
(Visual C#) 将访问修饰符从 private 更改为 protected 并添加 virtual 关键字,使处理程序代码如下所示:
protected virtual void timer1_Tick(object sender, System.EventArgs
e)
{
// Causes the label to display the current time.
lblDisplay.Text = DateTime.Now.ToLongTimeString();
} -
在“文件”菜单上单击“全部保存”。
-
(仅适用于 Visual Basic)在“保存项目”对话框中,将项目以“ctlDevClockLib”的名称保存到您选择的位置。
测试控件
该简单设备应用程序用作您的控件的测试容器。
生成此控件并创建一个测试容器
-
在“生成”菜单上单击“生成”(或“生成 ctlDevClockLib”)。
-
在“文件”菜单上指向“添加”,然后单击“新建项目”。
-
在“添加新项目”对话框中,单击“项目类型”窗格中的“智能设备”,再单击“模板”窗格中的“智能设备项目”。
-
在“名称”框中键入“Test”,然后单击“确定”。
-
在“添加新智能设备项目”对话框中,从“目标平台”下拉列表中选择“Pocket PC 2003”,从“.NET Compact Framework”下拉列表中选择“.NET Compact Framework 2.0 版”[.NET Compact Framework Version 2.0],单击“模板”窗格中的“设备应用程序”,再单击“确定”。
-
在“解决方案资源管理器”中,右击“Test”项目,然后单击“设为启动项目”。
-
右击“Test”项目,再单击“添加引用”。
-
在“添加引用”对话框中,单击“项目”选项卡,然后双击“ctlDevClockLib”。
-
在“工具箱”中,找到“ctlDevClockLib 组件”选项卡,然后双击“ctlDevClock”组件。
此控件即加载到设计器中。
-
在“调试”菜单上,单击“开始”(或“开始调试”)。
-
在“部署”对话框中,选择“Pocket PC 2003 SE 仿真程序”,然后单击“部署”。
创建 UserControl1 类
-
在“文件”菜单上指向“新建”,然后单击“项目”。
-
在“项目类型”窗格中,展开“Visual C#”,然后单击“智能设备”。
-
在“模板”窗格中单击“智能设备项目”。
-
在“名称”框中,键入“MyControlLibrary”,然后单击“确定”。
-
在“添加新智能设备项目”对话框中,从“目标平台”下拉列表中选择“Pocket PC 2003”,从“.NET Compact Framework”下拉列表中选择“.NET Compact Framework 2.0 版”,单击“模板”窗格中的“控件库”,再单击“确定”。
设计器将打开,并显示一个表示新建用户控件类的正方形。
添加属性
-
在“解决方案资源管理器”中,右击“UserControl1.cs”,再单击“查看类关系图”。
将打开一个表示类关系图的圆角矩形。
-
右击该类关系图,再单击“类详细信息”。
-
在“类详细信息”窗口的“属性”部分中,在“<添加属性>”提示下,键入“MyProperty”。
-
在“类型”列中,用“string”替换“int”。
-
右击 MyProperty 行开头的图标,再单击“属性”。
-
若要指定“自定义属性”属性的值,请单击省略号按钮 (…) 以打开“自定义属性”对话框。
-
键入 Browsable(false),然后单击“确定”。
“解决方案资源管理器”将显示包含该自定义属性的设计时属性 .xmta 文件(“DesignTimeAttributes.xmta”)。
生成控件库
-
在“解决方案资源管理器”中右击“UserControl1.cs”,再单击“查看代码”。
-
注释掉引发 System.NotImplementedException 的行,改为插入 return ""; 作为 get 操作。
-
在“生成”菜单上单击“生成 MyControlLibrary”。
测试 MyProperty 是否未显示在属性浏览器中
-
在“解决方案资源管理器”中右击“MyControlLibrary”,指向“添加”,再单击“新建项”。
-
在“添加新项”对话框中,单击“类别”窗格中的“Windows 窗体”,再单击“模板”窗格中的“Windows 窗体”,然后单击“添加”。
-
将“UserControl1”从“工具箱”拖到窗体上。
-
右击窗体上的用户控件图像,再单击“属性”。
“MyProperty”未显示在“属性”浏览器中。
-
在“解决方案资源管理器”中,双击该 .xmta 文件,然后将“false”替换为“true”。
-
重复这些步骤,以查看“属性”网格。注意,“MyProperty”现在显示出来。
-