移动设备应用程序开发入门3:为设备创作用户控件并添加属性

目标:1.创建一个控件库以及一个要放入该库中的用户控件。用户控件是单个可重用单元中的 Windows 窗体控件的组合,自定义控件是需要无法通过标准控件实现的 UI 或功能的控件,您应当将两者区分开来。

2.向设备项目中的用户控件添加属性。具体地说,添加使控件属性 (property) 在设计时可见的自定义属性 (attribute)。您可能希望在项目中添加此功能以防止属性值被更改。

该过程与桌面过程相似,不同之处在于设备项目将此信息存储在单独的元数据文件 (.xmta) 中。

创建控件库和控件
  1. (Visual Basic) 在“文件”菜单上单击“新建项目”。

    - 或 -

    (Visual C#) 在“文件”菜单上指向“新建”,然后单击“项目”。

  2. 在“新建项目”对话框的“项目类型”窗格中,展开“Visual Basic”或“Visual C#”,然后单击“智能设备”。

    如果开始并未出现您需要的语言,请展开“其他语言”。此显示由开发设置控制。

  3. 在“模板”窗格中单击“智能设备项目”。

  4. 在“名称”框中,键入“ctlDevClockLib”,然后单击“确定”。

  5. (仅限 Visual C#)在“位置”框中,验证要用于存储项目文件的位置,然后单击“确定”。

  6. 在“目标平台”下拉列表中,选择“Pocket PC 2003”。

  7. 从“.NET Compact Framework 版本”下拉列表中选择“.NET Compact Framework 2.0 版”[.NET Compact Framework Version 2.0]。

  8. 单击“模板”窗格中的“控件库”,再单击“确定”。

    此时会显示“组件设计器”。

您已经指定了项目名、根命名空间和程序集名称 (ctlDevClockLib)。但是,项目中的组件具有由 Visual Studio 分配的默认名称(例如,“UserControl1”)。通常,你需要将这些名称更改为更有意义的术语。

重命名该库和控件
  1. 在“解决方案资源管理器”中,右击“UserControl1.vb|cs”,再单击“属性”。

  2. 将“文件名”更改为“ctlDevClock.vb|cs”。

  3. (仅限 Visual C#)在询问是否要重命名对此代码元素的所有引用的消息框中,单击“是”。

    “属性”窗口中的名称更改现在传播到了其他引用,如类名和构造函数。

接下来,从“工具箱”中添加组件,以便为您的用户控件提供功能和用户交互。在本演练中,您添加一个访问系统时间的“计时器”控件和一个显示时间的“标签”控件。

添加组件并更改它们的属性
  1. 在“工具箱”中,双击“标签”。

    将向“组件设计器”中的用户控件添加一个标签控件。

  2. 在该标签控件的“属性”窗口中,执行下列操作:

属性

更改为

Name

lblDisplay

Text

(空白)

TextAlign

TopCenter

Font.Size

14

  1. 在“工具箱”中,双击“计时器”。

    组件栏中会出现一个“计时器”控件。

  2. 在该计时器控件的“属性”窗口中,执行下列操作:

属性 (Property)

更改为

Interval

1000

Enabled

True

在下面的步骤中,添加一个事件处理程序,以便在“标签”控件中显示时钟计时周期。

添加事件处理程序
  1. 在组件栏中,双击“Timer1”(Visual Basic) 或“timer1”(C#),以打开代码编辑器并定位至该计时周期事件。

  2. 插入下面的事件处理代码:lblDisplay.Text = DateTime.Now.ToLongTimeString();

  3. 将访问修饰符从 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();
    }

  4. 在“文件”菜单上单击“全部保存”。

  5. (仅适用于 Visual Basic)在“保存项目”对话框中,将项目以“ctlDevClockLib”的名称保存到您选择的位置。

“折叠”图像测试控件

该简单设备应用程序用作您的控件的测试容器。

生成此控件并创建一个测试容器
  1. 在“生成”菜单上单击“生成”(或“生成 ctlDevClockLib”)。

  2. 在“文件”菜单上指向“添加”,然后单击“新建项目”。

  3. 在“添加新项目”对话框中,单击“项目类型”窗格中的“智能设备”,再单击“模板”窗格中的“智能设备项目”。

  4. 在“名称”框中键入“Test”,然后单击“确定”。

  5. 在“添加新智能设备项目”对话框中,从“目标平台”下拉列表中选择“Pocket PC 2003”,从“.NET Compact Framework”下拉列表中选择“.NET Compact Framework 2.0 版”[.NET Compact Framework Version 2.0],单击“模板”窗格中的“设备应用程序”,再单击“确定”。

  6. 在“解决方案资源管理器”中,右击“Test”项目,然后单击“设为启动项目”。

  7. 右击“Test”项目,再单击“添加引用”。

  8. 在“添加引用”对话框中,单击“项目”选项卡,然后双击“ctlDevClockLib”。

  9. 在“工具箱”中,找到“ctlDevClockLib 组件”选项卡,然后双击“ctlDevClock”组件。

    此控件即加载到设计器中。

  10. 在“调试”菜单上,单击“开始”(或“开始调试”)。

  11. 在“部署”对话框中,选择“Pocket PC 2003 SE 仿真程序”,然后单击“部署”。

    创建 UserControl1 类
    1. 在“文件”菜单上指向“新建”,然后单击“项目”。

    2. 在“项目类型”窗格中,展开“Visual C#”,然后单击“智能设备”。

    3. 在“模板”窗格中单击“智能设备项目”。

    4. 在“名称”框中,键入“MyControlLibrary”,然后单击“确定”。

    5. 在“添加新智能设备项目”对话框中,从“目标平台”下拉列表中选择“Pocket PC 2003”,从“.NET Compact Framework”下拉列表中选择“.NET Compact Framework 2.0 版”,单击“模板”窗格中的“控件库”,再单击“确定”。

      设计器将打开,并显示一个表示新建用户控件类的正方形。

    添加属性
    1. 在“解决方案资源管理器”中,右击“UserControl1.cs”,再单击“查看类关系图”。

      将打开一个表示类关系图的圆角矩形。

    2. 右击该类关系图,再单击“类详细信息”。

    3. 在“类详细信息”窗口的“属性”部分中,在“<添加属性>”提示下,键入“MyProperty”。

    4. 在“类型”列中,用“string”替换“int”。

    5. 右击 MyProperty 行开头的图标,再单击“属性”。

    6. 若要指定“自定义属性”属性的值,请单击省略号按钮 (…) 以打开“自定义属性”对话框。

    7. 键入 Browsable(false),然后单击“确定”。

      “解决方案资源管理器”将显示包含该自定义属性的设计时属性 .xmta 文件(“DesignTimeAttributes.xmta”)。

    生成控件库
    1. 在“解决方案资源管理器”中右击“UserControl1.cs”,再单击“查看代码”。

    2. 注释掉引发 System.NotImplementedException 的行,改为插入 return ""; 作为 get 操作。

    3. 在“生成”菜单上单击“生成 MyControlLibrary”。

    测试 MyProperty 是否未显示在属性浏览器中
    1. 在“解决方案资源管理器”中右击“MyControlLibrary”,指向“添加”,再单击“新建项”。

    2. 在“添加新项”对话框中,单击“类别”窗格中的“Windows 窗体”,再单击“模板”窗格中的“Windows 窗体”,然后单击“添加”。

    3. 将“UserControl1”从“工具箱”拖到窗体上。

    4. 右击窗体上的用户控件图像,再单击“属性”。

      “MyProperty”未显示在“属性”浏览器中。

    5. 在“解决方案资源管理器”中,双击该 .xmta 文件,然后将“false”替换为“true”。

    6. 重复这些步骤,以查看“属性”网格。注意,“MyProperty”现在显示出来。

posted @ 2009-07-04 02:40  top1  阅读(462)  评论(0编辑  收藏  举报