65.9K
CodeProject 正在变化。 阅读更多。
Home

Visual Studio .NET 和 Microsoft .NET Compact Framework 入门

2004 年 1 月 20 日

CPOL

45分钟阅读

viewsIcon

202292

Visual Studio .NET 和 Microsoft .NET Compact Framework 入门。

本文由 MSDN 提供。

摘要

了解如何使用 .NET Compact Framework 1.0 和 Visual Studio .NET 2003 开发强大的智能客户端设备应用程序。(34 页)

目录

引言

Microsoft 开发 .NET Compact Framework 的唯一目的是构建应用程序。我指的是那些显示、收集、处理和转发信息的应用程序,那些让用户有理由携带设备的应用程序。虽然它们通常会有一个界面,但并不需要界面。它们处理的数据可能是本地的、远程的,或者是两者的组合。

.NET Compact Framework 简化了智能设备上的应用程序开发。目前,这包括 Pocket PC、Pocket PC 2002、Pocket PC Phone Edition 以及其他运行 Windows CE .NET 4.1 或更高版本的设备。

您需要 Visual Studio .NET 2003 来构建以 .NET Compact Framework 为目标应用程序。您可以使用 Visual C# .NET、Visual Basic .NET 或两者来构建应用程序。

.NET Compact Framework 主要有两个组件:公共语言运行时和 .NET Compact Framework 类库。

运行时是 .NET Compact Framework 的基础。它负责在执行时管理代码,提供内存管理和线程管理等核心服务,同时强制执行代码的安全性和准确性。以运行时为目标的代码称为托管代码;而不以运行时为目标的代码(例如 eMbedded Visual C++ 的情况)称为非托管代码或本地代码。

.NET Compact Framework 类库是可重用类的集合,您可以利用这些类来快速轻松地开发应用程序。此框架的设计考虑了移植性,无论移植到 Microsoft 平台还是第三方平台。这对您意味着什么?简单来说,您今天用于在 Pocket PC 上运行的编码技术和创建的应用程序,如果为该平台创建了 .NET Compact Framework 的版本,它们就可以在其他平台(如手机或其他供应商的 PDA)上运行。

公共语言运行时

公共语言运行时提供了一个代码执行环境,用于管理以 .NET Compact Framework 为目标的代码。代码管理可以采取内存管理、线程管理、安全管理、代码验证和编译以及其他系统服务的形式。

运行时旨在提高性能。它使用即时 (JIT) 编译,这使得托管代码可以在您的应用程序运行的平台上的本地机器语言中运行。这使您可以创建可以面向各种平台的应用程序,而无需担心重新编译或生成针对每个特定平台的程序集。

尽管您的移动应用程序是用 Visual Basic .NET 或 C# .NET 编写的(因此是托管代码),您仍然可以合并存储在动态链接库 (DLL) 中的外部函数和子例程,包括 Windows CE API。 .NET Compact Framework 提供了数据类型和结构支持,使您可以轻松地将 Windows CE API 中的函数合并到您的应用程序中。

.NET Compact Framework 类库

.NET Compact Framework 类库是与公共语言运行时紧密集成的可重用类集合。您的应用程序利用这些库来获得功能。

正如您所期望的,面向对象类库,.NET Compact Framework 类型使您能够完成一系列常见的编程任务,包括界面设计、利用 XML、数据库访问、线程管理和文件 I/O 等任务。

以下是 .NET Compact Framework 可用的常见功能列表。

窗体相关类

.NET Compact Framework 实现了 System.Windows.FormsSystem.Drawing 类的一个子集,这使您能够为您的设备应用程序构建丰富的基于 Windows CE 的用户界面。Visual Studio .NET 中的窗体设计器为您管理了与这些类的大部分交互。

Windows Forms 在 .NET Compact Framework 下的实现包括对窗体、.NET Framework 中的大多数控件、第三方控件托管、位图和菜单的支持。表 1 列出了 .NET Compact Framework 包含的控件。

表 1. .NET Compact Framework 包含的控件
Control 描述
Button 简单的命令按钮
CheckBox 通用复选框
ComboBox 项目下拉列表
ContextMenu 实现上下文敏感菜单
DataGrid 可绑定到数据源的网格
DomainUpDown 可通过滚动条导航的项目列表
HScrollBar 水平滚动条
ImageList 存储图像的容器
InputPanel 控制软键盘 (SIP)
Label 用于显示文本的简单控件
ListBox 提供项目列表
ListView 提供四种数据视图:大图标、小图标、列表和详细信息
MainMenu 在窗体上实现菜单栏
NumericUpDown 包含滚动条的数字输入字段
OpenFileDialog 提供对本地打开文件对话框的访问
Panel 用于容纳其他控件的容器
PictureBox 显示图像
进度条 任务进度的视觉指示器
RadioButton 通用单选按钮
SaveFileDialog 提供对本地保存文件对话框的访问
StatusBar 用于显示文本的简单面板
TabControl 为应用程序提供标签界面
文本框 标准文本输入字段
定时器 基本计时器组件
ToolBar 在窗体上实现工具栏
TrackBar 用于数字数据的滑块界面
树视图 以分层格式显示数据
VScrollBar 垂直滚动条

由于 .NET Compact Framework 是完整 .NET Framework 的一个子集,因此包含的控件具有其桌面版本控件功能的一个子集。由于尺寸和性能的考虑,.NET Compact Framework 控件省略了一些控件属性、方法和事件。通过少量编码,您可以根据需要自己实现这些省略的功能。这是因为 .NET Compact Framework 允许您通过继承基类控件来创建自己的控件。在此基础上,您可以添加自己的属性、方法和事件来创建您需要的控件。

数据和 XML 类

.NET Compact Framework 包含一组类,使您可以轻松地将数据(无论是来自关系型还是非关系型数据源)包括 XML 内容,集成到您的移动应用程序中。这些类定义在 System.DataSystem.Xml 命名空间下。.NET Compact Framework 中数据和 XML 类的实现是 .NET Framework 中类的子集。

Web 服务

.NET Framework 很大程度上与 Web 服务相关。在 .NET Compact Framework System.Web 命名空间中,您拥有对应 .NET Framework 命名空间提供的功能的一个缩减版本。最值得注意的是,您可以创建 Web 服务客户端,但不能在 .NET Compact Framework 下托管 Web 服务。

这些 XML Web 服务客户端可以是同步的或异步的。创建面向 .NET Compact Framework 的 XML Web 服务客户端非常容易。Visual Studio .NET IDE 会为您完成大量工作。

GDI 支持

.NET Compact Framework 通过 System.Drawing 命名空间支持基本的 GDI 绘图元素,包括位图、画笔、字体、图标和钢笔。

基类

.NET Compact Framework 提供了一组强大的基类,这些类公开了广泛的功能供开发人员使用。这种底层基础架构使您能够编写丰富的 .NET 应用程序,包括创建多线程应用程序 (System.Threading)、利用网络资源 (System.Net) 和处理文件 (System.IO)。

IrDA 支持

Windows CE 设备,例如 Pocket PC 和 Pocket PC 2002,包含红外 (IR) 通信功能。为了支持这一点,.NET Compact Framework 包含允许您利用应用程序内的 IR 通信的类。这些类是 System.Net.IrDA 命名空间的一部分。您可以使用 IR 与 Pocket PC、打印机和其他支持 IR 的设备进行通信。

蓝牙支持

.NET Compact Framework 不原生支持蓝牙。您可以通过串行端口通信或通过提供商的 API 访问大多数第三方 Pocket PC 蓝牙实现。

Visual Basic 支持

Visual Basic .NET 大量使用了位于 Visual Basic 帮助程序库中的帮助器函数。.NET Compact Framework 也包含了这些函数的一个子集。Visual Basic 开发人员将这些函数视为语言的核心部分,这也是它们被包含的原因。

如果您是正在转换为 .NET Compact Framework 的 Visual Basic 或 eMbedded Visual Basic 开发人员,这意味着您习惯使用的许多 Visual Basic 语言函数将在 Visual Basic .NET 中提供给您。

按需提供的功能

为了节省目标设备的资源,Microsoft 将 .NET Compact Framework 分为逻辑组件。通过将组件作为单独的 DLL(在 .NET Compact Framework 中称为程序集)分发,Microsoft 使您可以选择性地选择所需的功能,并且仅选择目标设备有空间容纳的功能。

例如,System.SR 程序集包含错误消息字符串。将此程序集包含在您的应用程序中可以访问遇到的任何错误的详细说明,这在调试会话中无疑是有帮助的,但在应用程序发布到生产环境后,则很少需要。排除此程序集不会影响您应用程序的性能或功能;它仅仅意味着您将无法访问详细的错误消息。

.NET Compact Framework 按需提供的另一个示例是 SQL Server CE 组件,它们分布在一组 DLL 中,总大小略大于 1MB。除非您显式添加对 System.Data.SqlServerCe 程序集的引用,否则这些 DLL 将不会包含在您的应用程序中。

.NET Compact Framework 中缺失的功能

为了适应 Windows CE 的运行限制,.NET Framework 必须进行大量精简。未能进入 .NET Compact Framework 的最显著的 .NET Framework 功能是本节的主题。

方法重载

重载方法提供了调用该方法的替代方式。它还增加了 Framework 的大小。因此,.NET Compact Framework 删除了几乎所有方法的重载。

这对您来说是双重的。首先,您在桌面应用程序中使用的特定方法重载很可能在开发 .NET Compact Framework 应用程序时不可用。其次,当您阅读文档时,要密切注意方法是否由 .NET Compact Framework 支持。

缺失的控件

许多 .NET Framework 控件未能进入 .NET Compact Framework。这些控件的缺失对移动开发人员来说影响不大。由于打印在移动应用程序中的作用非常有限,因此删除整个打印相关控件系列不成问题。这解决了 CrystalReportViewer、PageSetupDialog、PrintDialog、PrintDocument、PrintPreviewControl 和 PrintPreviewDialog 控件。您可以用自己的对话框替换许多缺失的对话框,或者通过 Windows CE API 直接访问系统对话框。

第三方控件已开始可用,以弥补 .NET Compact Framework 中遗漏的控件。有关第三方 .NET Compact Framework 控件的列表,请参阅本文末尾的参考资料。

XML 功能

尽管 .NET Compact Framework 在 XML 方面提供了很多功能,但也有同等的功能被精简了。关键缺失的 XML 相关组件是 System.Xml.XPath 命名空间。XPath 命名空间使 XML 解析比 .NET Compact Framework 下提供的方法容易得多。如果没有它,您可以使用递归和迭代搜索与文档对象模型 (DOM) 结合的方式。

.NET Compact Framework 缺少另一个关键的 XML 组件,即可扩展样式表语言转换 (XSLT)。使用 XSLT,您可以将 XML 文档转换为不同的格式。

在 XML 相关方面,.NET Compact Framework 目前不支持设备端 XML Web 服务的开发。

数据库支持

.NET Compact Framework 提供了强大的数据相关工具集。为 SQL Server CE 提供了本地数据库支持。在服务器端,.NET Compact Framework 为 SQL Server 提供了支持。

请注意,有一个第三方提供了一个用于处理 Pocket Access 数据库的 .NET Compact Framework 组件。有关更多信息,请参阅本文末尾的参考资料。

二进制序列化

出于大小和性能考虑,BinaryFormatterSoapFormatter 类都已从 .NET Compact Framework 中省略。

访问 Windows 注册表

.NET Framework 具有 Microsoft.Win32.Registry 命名空间,可以方便地从应用程序中使用 Windows 注册表。显然,此命名空间未包含在 .NET Compact Framework 中,因为它与 Win32 相关,而不是 Windows CE。您可以通过调用相关的 Windows API 来访问 Windows CE 注册表。

利用 COM 组件

将 COM 对象集成到基于 .NET Compact Framework 的应用程序中是一个两步过程。首先,您必须编写一个非托管(即 eMbedded Visual C++)DLL 包装器,该包装器公开 COM 对象。根据 COM 对象的复杂性,这可能从简单到极其复杂不等。其次,您必须使用 PInvoke 来访问您的 DLL 包装器。幸运的是,开发社区已经开始着手访问更常用的 COM 组件,其中一些已包含在本文末尾的参考资料中。

安全

.NET Compact Framework 不保护对非托管代码的访问。任何应用程序都可以调用任何系统或非系统 API。

目前 .NET Compact Framework 没有基于角色的安全性。Principal 对象不了解已知身份或已知角色。

XML Web 服务

.NET Compact Framework XML Web 服务功能中最值得注意的排除是使用 cookie 的能力。Cookie 通常用于在客户端调用之间在服务器上维护状态。虽然 cookie 在 Web 服务中的使用不如在网站上的普遍,但它们仍然在使用。

就 Web 服务而言,.NET Compact Framework 提供的加密能力有限。

打印

.NET Compact Framework 不提供打印支持。没有简单的方法可以通过 IR 与网络打印机或外部打印机进行交互。

访问网络打印机的变通方法是构建一个服务器端应用程序,该应用程序接受并打印由您的移动应用程序提交的作业。

您可以通过 IR 端口直接将输出发送到支持 IR 的打印机。您使用 System.Net.IrDA 命名空间来访问设备的 IR 端口。

GDI+

Windows CE 不原生支持 GDI+,因此 GDI+ 相关功能已从 .NET Compact Framework 中删除。

Remoting

.NET Compact Framework 的第一个版本不支持 remoting。

使用 Visual Studio .NET 2003 进行开发

Visual Studio .NET 2003 提供了一个强大的开发环境,用于创建以 .NET Compact Framework 为目标应用程序。Visual Studio .NET 包含一组预构建的设备配置文件。设备配置文件包含构建以特定设备为目标应用程序所需的信息。使用 Visual Studio .NET,有配置文件可让您为 Pocket PC、Pocket PC 2002 以及 Windows CE .NET 4.1 及更高版本创建应用程序。这些配置文件允许您创建包含 Windows Forms 和 ADO.NET 的应用程序,并提供消费 Web 服务的功能。

配置文件可以是设备特定的,例如以 Pocket PC 为目标;平台无关性更强的,以 Windows CE 平台为目标;或者通用配置文件,以 .NET Compact Framework 已移植到的任何平台为目标。

Visual Studio .NET 支持设备包(以前称为 SDK)。与嵌入式工具的早期版本一样,设备包独立于 Visual Studio .NET,并且可以独立安装和更新。

IDE 中的新增功能

除了 Visual Studio .NET 中原有的所有功能外,还有以下设备特定的功能:

  • 模板—常见项目类型的预定义配置。为 Pocket PC 和 Windows CE 设备提供了模板。
  • 设备特定控件—专为 Pocket PC 和 Windows CE 使用而设计的控件。界面、资源消耗和功能已针对这些环境进行了定制。
  • 设备模拟器—模拟特定设备的测试环境。模拟器在开发者的 PC 上运行,无需设备即可进行测试。
  • 应用程序的自动部署—允许您轻松测试到模拟器或设备,为开发者提供无缝的测试环境。
  • 远程调试—允许您在开发 PC 上利用 Visual Studio .NET IDE 提供的调试工具来调试您的设备应用程序。所有调试工具都可以与在模拟器或设备上运行的 .NET Compact Framework 应用程序一起使用。

支持的语言

.NET Compact Framework 支持两种开发语言:C# .NET 和 Visual Basic .NET。虽然早期版本的 Windows CE 开发工具偏爱 C 语言(如 eMbedded Visual C++),但对于 .NET Compact Framework,您选择哪种语言差别不大,因为两者都同样强大和实用。

作为 Visual Studio .NET 开发环境的最后添加,J# 不受 .NET Compact Framework 支持。

您还应该知道,.NET Compact Framework 在语言方面存在另一个 .NET Framework 所没有的限制。在 .NET Framework 下,您可以在单个项目中混合使用不同语言的组件。相比之下,.NET Compact Framework 项目仅限于一种语言,即 C# .NET 或 Visual Basic .NET。要解决 .NET Compact Framework 强制执行的这种单一语言项目限制,您可以创建使用 Class 模板的其他项目。将您的其他语言代码添加到模板中,然后简单地在您的应用程序项目中添加对这些类的引用。

在线文档

Visual Studio .NET 随附的文档提供了与 .NET Compact Framework 相关的信息。您将找到 .NET Compact Framework 特有的主题,例如“使用 .NET Compact Framework 创建自定义控件”,以及 .NET Compact Framework 支持的功能的条目标识。

图 1 显示了 .NET Compact Framework 支持的 DataTable 属性的示例。每个受支持的属性都带有“受 .NET Compact Framework 支持”的注释。这是查找对象支持的功能以及快速确定 .NET Framework 和 .NET Compact Framework 之间差异的绝佳方法。

图 1. 在线帮助

创建 .NET Compact Framework 应用程序

启动 Visual Studio .NET 后,它将显示“开始页”,如图 2 所示。从“开始页”中,您可以打开现有项目并创建新项目,包括以 .NET Compact Framework 为目标的项目。

图 2. Visual Studio .NET 开始页

单击“新建项目”按钮将显示“新建项目”对话框,如图 3 所示。在此对话框中,您可以选择模板来创建各种项目类型,包括两个以 .NET Compact Framework 为目标的项目。在“Visual Basic 项目”和“Visual C# 项目”文件夹下都有一个“智能设备应用程序”模板。

图 3. 新建项目对话框

启动 Visual Basic .NET 项目

创建 Visual Basic .NET 项目

  1. 启动 Visual Studio .NET 2003。
  2. 在“开始页”上,单击“新建项目”按钮。
  3. 将显示“新建项目”对话框,如图 3 所示。在“项目类型”列表中,选择“Visual Basic 项目”文件夹。
  4. 将显示 Visual Basic 项目模板。选择“智能设备应用程序”模板。
  5. 在“名称”字段中,输入项目的名称。
  6. 在“位置”字段中,输入项目将创建的位置。
  7. 点击**确定**。

启动 Visual C# .NET 项目

创建 Visual C# .NET 项目

  1. 启动 Visual Studio .NET 2003。
  2. 在“开始页”上,单击“新建项目”按钮。
  3. 将显示“新建项目”对话框,如图 3 所示。在“项目类型”列表中,选择“Visual C# 项目”文件夹。
  4. 将显示 Visual C# 项目模板。选择“智能设备应用程序”模板。
  5. 在“名称”字段中,输入项目的名称。
  6. 在“位置”字段中,输入项目将创建的位置。
  7. 点击**确定**。

智能设备应用程序向导

选择“智能设备应用程序”模板将加载“智能设备应用程序向导”,如图 4 所示。此向导用于引导您完成选择应用程序项目类型的过程。

图 4. 智能设备应用程序向导

此向导的界面分为两个列表框。上面的列表框允许您选择目标平台。它包含两个选项:Pocket PC 或 Windows CE。Pocket PC 针对特定的设备平台,而 Windows CE 模板用于创建更通用的应用程序,该应用程序可以在运行该操作系统的各种设备上运行。

下面的列表框显示了可用于您选择的目标设备(Pocket PC 或 Windows CE)的项目类型。

Pocket PC 项目类型

四种项目类型以 Pocket PC 和 Pocket PC 2002 平台为目标,如图 5 所示。它们是 Windows 应用程序、类库、非图形应用程序和空项目。表 2 提供了对每种项目类型的描述。

图 5. Pocket PC 项目类型

这些项目类型可用于创建以运行 SH3、MIPS 或 ARM 处理器的 Pocket PC 设备以及具有 ARM 或 XScale 处理器的 Pocket PC 2002 设备为目标的项目。

表 2. Pocket PC 项目类型
项目类型 描述
Windows 应用程序 基于 Windows Forms 的项目,包括 Pocket PC 特定的控件。这是最常用的模板,因为它生成基于 Windows 的应用程序。
类库 类库允许您将相关组件打包到一个文件中。它们可用于开发其他应用程序,或作为其他组件的继承基础。此项目类型最适合创建将在多个应用程序中重用的代码模块。
非图形应用程序 用于创建没有用户界面的可执行文件。最适合不需要用户交互的后台和维护应用程序。
空项目 定义一个没有预定义组件的项目,允许您从头开始自定义构建一切。
注意 Pocket PC 设备不自带控制台支持。作为一种变通方法,您可以自己加载 console.dll,它随 Platform Builder 一起提供。

Windows CE 项目类型

如图 6 所示,四种项目类型以 Windows CE 平台为目标。它们是 Windows 应用程序、类库、控制台应用程序和空项目。表 3 提供了对每种项目类型的描述。

图 6. Windows CE 项目类型
表 3. Windows CE 项目类型
项目类型 描述
Windows 应用程序 基于 Windows Forms 的项目,包括 Windows CE .NET 特定的控件。这是最常用的模板,因为它生成基于 Windows 的应用程序。
类库 类库允许您将相关组件打包到一个文件中。它们可用于开发其他应用程序,或作为其他组件的继承基础。此项目类型最适合创建将在多个应用程序中重用的代码模块。
控制台应用程序 用于创建将在控制台窗口中运行的可执行文件。最适合可能需要也可能不需要用户交互的后台和维护应用程序。与 Pocket PC 不同,Windows CE 原生支持控制台应用程序。
空项目 定义一个没有预定义组件的项目,允许您从头开始自定义构建一切。

设置项目属性

与所有 Visual Studio .NET 项目一样,.NET Compact Framework 项目通过“项目属性页”对话框进行配置。通过此对话框,您可以配置要包含的命名空间;使用哪个窗体作为启动窗体;与应用程序关联的图标;应用程序的构建方式;构建位置;部署方式;优化配置以及其他各种设置。

有两种方法可以访问“属性页”对话框:

  • 通过解决方案资源管理器—右键单击您的项目,然后单击“属性”。将显示“属性页”对话框,如图 7 所示。
  • 通过“项目”菜单—首先在“解决方案资源管理器”窗口中选择您的项目。然后,从“项目”菜单中,单击“属性”。将显示“属性页”对话框。

图 7. 属性页对话框

创建界面

如果您已经是经验丰富的 Visual Studio .NET 开发人员,那么在开始为以 .NET Compact Framework 为目标的项目创建用户界面时,您将只需要很少的指导。对于初次接触 Visual Studio .NET IDE 的人来说,基于“Windows 应用程序”模板的新项目将自动显示一个默认窗体,如图 8 所示。

在此示例中,项目类型是 Windows 应用程序,它将以 Pocket PC 为目标。此类应用程序的模板包含一个大小适合 Pocket PC 平台的窗体。菜单控件(显示在窗体下方)与窗体一起包含,因为大多数 Pocket PC 应用程序都包含菜单。

图 8. 默认 Pocket PC 窗体

包含的控件

.NET Compact Framework 包含可用于构建桌面 Windows 应用程序的控件的一个子集。总的来说,您会发现这些控件提供 .NET Framework 下等效控件的一个子集。这种差异与目标平台施加的资源限制有关。

通过 .NET Compact Framework 提供的控件显示在表 4 中。

表 4. .NET Compact Framework 包含的控件
Button CheckBox ComboBox ContextMenu DomainUpDown
HScrollBar ImageList InputPanel Label ListBox
ListView MainMenu NumericUpDown OpenFileDialog Panel
PictureBox 进度条 RadioButton SaveFileDialog StatusBar
TabControl 文本框 定时器 工具栏 TrackBar
树视图 VScrollBar DataGrid
注意 还有许多第三方控件可用。有关更多详细信息,请参阅本文末尾的参考部分。

构建自定义控件

.NET Compact Framework 最酷的功能之一是它如何使您能够绕过限制进行编码。以控件为例。所有与 .NET Compact Framework 一起提供的控件都与其完整的 Framework 对应控件相比受到限制。它们缺少属性、方法和事件。通过 .NET Compact Framework,您可以修改标准控件的功能以满足您的需求。

您可以将自定义控件分为三类:用户控件、继承控件和所有者绘制控件。用户控件最简单,但遗憾的是 .NET Compact Framework 不支持。继承控件以 .NET Compact Framework 控件为起点。然后,根据需要添加、删除或修改该基控件的属性、方法和事件。从控件的复杂性来看,继承控件通常介于用户控件和所有者绘制控件之间。所有者绘制控件在界面方面提供了最大的灵活性。它们也需要最大的工作量。

虽然为 .NET Compact Framework 创建自定义控件的过程超出了本文的范围,但您会发现与 .NET Framework 相同的技术和方法也适用于 .NET Compact Framework。

以下链接提供了有关为 .NET Compact Framework 创建自定义控件的更多详细信息:

构建菜单

查看任何商业上成功的 Pocket PC 应用程序,您都会发现一个菜单栏。几乎毫无例外,要构建具有一定功能的、高度有效的 Pocket PC 应用程序,需要使用菜单栏。

菜单栏的使用非常普遍,以至于默认的 Pocket PC Windows 应用程序模板会自动将菜单栏附加到它创建的初始窗体上。使用 Visual Studio .NET 和 .NET Compact Framework,构建菜单非常简单直接。您只需通过“窗体设计器”提供的图形化工具构建一个菜单层次结构。

虽然使用设计时工具构建菜单是最简单的方法,但并非唯一的方法。菜单也可以通过代码构建。虽然稍微复杂一些,但在某些情况下,您可能希望在应用程序运行时动态创建菜单。

MainMenu 控件在窗体上实际实现菜单栏。菜单设计器提供了配置 MainMenu 控件的图形界面。您可以使用菜单设计器构建将组成整个菜单栏的菜单和菜单项。

激活菜单设计器

  1. 在 Visual Studio .NET IDE 中,打开要添加菜单的窗体。如果您的窗体尚不包含 MainMenu 控件,请立即添加一个。
  2. 单击图标托盘中的 MainMenu 图标。窗体上的菜单栏将激活。
  3. 单击窗体上的菜单栏。这将激活菜单设计器。第一个菜单的空间将高亮显示,如图 9 所示。

    图 9. 菜单设计器中的空菜单
  4. 在高亮显示区域输入第一个(最左边的)菜单的名称。在图 10 所示的示例中,定义了 New 菜单。
  5. 此时,您可以添加更多菜单,或定义将显示在 New 菜单上的项目。要添加更多菜单,只需在第一个菜单定义的右侧的“在此处键入”框中输入下一个菜单的名称即可。在图 10 中,这将位于 New 的右侧。在我们的示例中,我们将添加一个 Edit 菜单。

    图 10. 添加 New 菜单
  6. 要为 Edit 菜单定义菜单项,请单击 Edit 上方的“在此处键入”框,然后键入菜单项的名称。图 11 展示了将 Cut 菜单项添加到 Edit 菜单。
  7. 继续此创建菜单及其项目的过程,直到完成菜单。

    图 11. 向 Edit 菜单添加项目

编码菜单项

如果您正在构建菜单,则需要响应用户点击菜单项的操作。每个菜单项都有一个 Click 事件过程,当用户点击该项时执行。列表 1 显示了这样一个过程的示例。

列表 1. 菜单项的点击事件过程

'[Visual Basic]
Private Sub mnuEditCut_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles mnuEditCut.Click
    MessageBox.Show("cut...")
End Sub
//[Visual C#]
private void mnuEditCut_Click(object sender, System.EventArgs e)
{
    MessageBox.Show("cut...");
}

构建工具栏

桌面开发人员应注意,Pocket PC 环境中的工具栏与标准桌面应用程序部署的工具栏不同。最值得注意的是,Pocket PC 工具栏出现在界面的底部,而不是顶部。此外,它们始终限制在少数按钮,这是 Pocket PC 最小屏幕空间限制所强制的。图 12 显示了这两种特征。

图 12. 工具栏示例

工具栏在应用程序中起着两个重要作用。首先,它们增添了趣味。Pocket PC 应用程序通常由于尺寸限制,外观比较朴素。工具栏及其包含的按钮可以为您的应用程序界面增添视觉“冲击力”。

其次,工具栏简化了用户交互。常用功能和特性可以放在工具栏上,而不是嵌套在菜单中。这样做的优点是访问工具栏按钮只需一次点击。相比之下,菜单项至少需要两次点击,如果该项是子菜单的一部分,则可能需要第三次。

此构建工具栏的过程分为三个步骤:

  1. 添加并配置 ImageList 控件。ImageList 控件提供最终将显示在菜单按钮上的图像。
  2. 添加并配置 ToolBar 控件。ToolBar 控件定义将构成最终用户看到的实际工具栏的按钮。
  3. 编写事件过程以响应按钮点击。ToolBar 控件使用单个事件过程来响应其任何按钮的点击。

编码工具栏

对于工具栏,您只需要关注一个事件:用户点击按钮时触发的事件。该事件是 ButtonClick 事件。ButtonClick 事件的事件过程由所有按钮共享。

处理此事件过程的唯一问题是确定哪个按钮被点击了。通过引用传递给过程的事件参数,可以轻松完成此操作。通过引用 e.Button.ImageIndex,您可以确定与被点击按钮关联的图像。此索引是您最初在 ImageList 控件中存储图像时分配给它们的索引。列表 2 演示了处理按钮点击。

列表 2. 处理工具栏按钮点击

'[Visual Basic]
Private Sub tlbMain_ButtonClick(ByVal sender As System.Object, _
    ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) _
    Handles tlbMain.ButtonClick
    Select Case e.Button.ImageIndex
    Case 0
       MessageBox.Show("print...")
    Case 1
       MessageBox.Show("task...")
    End Select
End Sub
//[Visual C#]
private void tlBMain_ButtonClick(object sender, 
  System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
    switch (e.Button.ImageIndex)
    {
      case 0:
        MessageBox.Show("print...");
      case 1:
        MessageBox.Show("task...");
    }
}

添加代码

现在您已经了解了构建界面的基本知识,我们准备将注意力转向如何为应用程序添加代码。与在 Visual Studio .NET IDE 中开发的任何应用程序一样,代码通过代码窗口添加。

如果您不熟悉 Visual Studio .NET 环境,您将大饱眼福。代码窗口提供了丰富的功能,从语句完成、自动列出成员、提供参数信息和可折叠代码区域,仅举几例。

导航代码的最简单方法是使用位于窗口顶部的两个组合框。代码窗口左上角的组合框允许您选择模块中的类。窗口右上角的组合框允许您选择该类中的方法。

测试您的应用程序

用户界面完成后,代码编写完毕,是时候将注意力转向测试您的应用程序了。Visual Studio .NET 提供了两种测试以 .NET Compact Framework 为目标应用程序的方法:通过模拟器和在设备上。无论是模拟器还是设备,Visual Studio .NET 都会处理您的应用程序以及应用程序所需的所有组件(包括 .NET Compact Framework 和 SQL Server CE)的部署。

所有这些都是在您从 Visual Studio .NET 2003 中测试 .NET Compact Framework 应用程序时处理的。会检查目标平台以确认已安装 .NET Compact Framework。如果 Visual Studio .NET 确定 .NET Compact Framework 缺失,它将在尝试运行您的应用程序之前自动复制并安装 .NET Compact Framework。此安装过程将在您首次测试到设备或模拟器时发生,并且如果您硬重置设备或模拟器。

如果您的应用程序使用 SQL Server CE,则会使用类似的过程。Visual Studio .NET 将检查目标平台以确认已安装 SQL Server CE 组件。如果 Visual Studio .NET 找不到它们,它将在运行您的应用程序之前自动复制并安装所需的 SQL Server CE 组件。

在确定应用程序所需的所有组件都存在后,您的应用程序将被复制到目标平台,放置在项目配置中指定的目录中,然后启动。

运行测试

有几种方法可以运行您的应用程序测试:

  • 在 Visual Studio .NET 工具栏上,单击“开始”按钮。
  • 在“调试”菜单中,选择“开始”或“无调试开始”。
  • 按 F5 键(带调试开始)或 Ctrl+F5(无调试开始)。

在模拟器中进行测试

模拟器提供了一个桌面 PC 内的环境,该环境模拟了您的应用程序所针对的设备平台的功能和操作。在没有设备或设备不可用时,模拟器非常有用。

请注意:在模拟器中进行测试也有其缺点。最主要的是,模拟器运行在具有比目标设备多得多的处理资源的桌面 PC 上。这可能会给您关于应用程序性能如何的错误印象。此外,模拟器的输入是通过键盘和鼠标提供的,而不是用户将使用的手写笔。如果您没有有意识地意识到这种差异,您可能会创建一个在模拟器中易于使用但在设备上使用起来很痛苦的应用程序。最后,模拟器提供了设备的“接近”表示,而不是精确匹配。所有模拟器都存在细微的差异。

模拟器要求

Visual Studio .NET 提供的模拟器除非运行它的开发 PC 具有网络连接,否则无法运行。如果您的 PC 没有网络连接,您仍然可以使用模拟器,方法是安装 Microsoft Loopback Network Adapter。此适配器模拟网络连接,并有效地使模拟器能够运行。

在 Windows 2000 下安装环回适配器

在 Windows 2000 下,安装 Microsoft Loopback Network Adapter 的过程如下:

  1. 在“控制面板”中,单击“添加/删除硬件”。
  2. 在“添加/删除硬件向导”的“欢迎”页面上,单击“下一步”。
  3. 单击“添加/排除设备故障”,然后单击“下一步”。系统将暂停扫描即插即用设备。
  4. 在“选择硬件设备”页面上,单击“添加新设备”,然后单击“下一步”。
  5. 在“查找新硬件”页面上,单击“否,我想从列表中选择硬件”,然后单击“下一步”。
  6. 在“硬件类型”页面上,单击“网络适配器”,然后单击“下一步”。将有一小段时间延迟,期间将生成网络适配器列表。
  7. 在“选择网络适配器”页面上,先在“制造商”列表框中单击“Microsoft”,然后在“网络适配器”列表框中选择“Microsoft Loopback Adapter”。单击“下一步”按钮。
  8. 在“开始硬件安装”页面上,单击“下一步”。环回适配器将安装。

在 Windows 2000 下配置环回适配器

与任何网络适配器一样,安装环回适配器只是过程的一半。您还需要配置新适配器。请按照以下步骤配置环回适配器:

  1. 在“开始”菜单中,单击“设置”,指向“网络和拨号连接”,然后单击“本地连接”。将显示“本地连接”状态对话框。
  2. 单击“属性”。将显示“本地连接属性”窗口。
    注意 检查以确保您正在处理正确的连接。“使用连接”字段应显示“Microsoft Loopback Adapter”。
  3. 选择“Internet 协议 (TCP/IP)”,然后单击“属性”。将显示“Internet 协议”窗口。
  4. 配置 IP 地址属性。
  5. 单击“确定”关闭“Internet 协议”窗口。
  6. 单击“确定”关闭“本地连接属性”窗口。
  7. 单击“关闭”关闭“本地连接”状态窗口。

将文件移至模拟器

早期版本的 Windows CE / Pocket PC 模拟器提供了两种不同的方法来创建模拟器环境。第一代模拟器使用封闭环境,无法从开发 PC 上标准的基于 Windows 的文件管理工具访问。您需要的任何文件都必须在模拟器中创建,或者使用嵌入式工具随附的专用实用程序复制到模拟器。

第二代模拟器提供了一个更开放的环境,可以使用常见工具(如文件资源管理器)进行访问。模拟器目录结构存在于开发 PC 的一个子目录中。将文件复制到模拟器和从模拟器复制文件是一个简单的拖放操作。

Visual Studio .NET 随附的模拟器将我们带回到了封闭的模拟器环境。更复杂的是,与嵌入式工具的早期版本不同,Visual Studio .NET 不包含模拟器文件管理工具。这种缺失需要您进行一些创造性的变通。

有三种常见的方法可以在模拟器环境中提供文件。一种方法是通过在模拟器上运行的应用程序来创建文件。我认为这里不需要进一步讨论。您可以使用标准的 .NET 编程技术来创建文本、XML 或数据库文件。

其他两种方法,将文件添加到项目中和从共享复制文件,需要一些额外的说明。

将文件添加到项目

将文件移动到模拟器的最简单方法是将它们包含在项目中。使用此方法的一个优点是,如果您对模拟器进行了硬重置,您只需重新构建项目即可恢复测试。

使用此方法的步骤是:

  1. 在 Visual Studio .NET 中打开您的项目。
  2. 在“项目”菜单上,单击“添加现有项…”。
  3. 在“添加现有项”对话框中,选择要复制到模拟器的文件。
  4. 单击“打开”。文件将被添加到您的项目中。
  5. 在“解决方案资源管理器”窗口中,选择您添加的文件。
  6. 在“属性”窗口中,验证“生成”属性是否设置为“内容”。设置为“内容”的项目将作为单独的文件复制到目标设备。设置为“嵌入式资源”的项目是应用程序可执行文件的一部分。
  7. 构建项目。文件将与您的应用程序一起复制到设备。

从共享复制文件

第二种方法提供了更大的灵活性,并且需要少量额外的工作。它利用了 Pocket PC 操作系统内置的网络文件共享功能,该功能随后通过 Visual Studio .NET 附带的模拟器提供。

此方法包含两个部分:在开发 PC 上设置共享,然后通过模拟器的文件资源管理器访问该共享。

设置共享需要两个配置。首先,您必须配置您的 PC 以启用共享。其次,您配置要共享的各个文件夹。

在运行 Windows 2000 的开发 PC 上启用共享

  1. 在“开始”菜单中,单击“设置”,指向“网络和拨号连接”,然后单击您的本地连接。
  2. 在“本地连接”窗口中,单击“属性”。
  3. 在“本地连接属性”窗口中,启用“Microsoft 网络的文件和打印共享”。
  4. 单击“确定”关闭“本地连接属性”窗口。
  5. 单击“关闭”关闭“本地连接”窗口。

此时,您已配置了开发 PC 以允许文件共享。接下来,您需要共享一个文件夹,您将在其中放置要复制到模拟器的文件。

在 Windows 2000 下共享文件夹

  1. 启动文件资源管理器。
  2. 在文件资源管理器中,右键单击您要共享的文件夹,然后单击“属性”。
  3. 在“属性”窗口中,单击“共享”选项卡。
  4. 在“共享”选项卡上,选择共享该文件夹并为共享提供名称。
  5. 单击“确定”关闭“属性”窗口。

配置好开发 PC 后,您就可以复制文件了。首先,您需要将所有要发送到模拟器的文件放在共享文件夹中。然后,要将文件移至模拟器,请执行以下步骤:

  1. 启动模拟器。
  2. 在模拟器中,启动文件资源管理器。
  3. 在文件资源管理器菜单上,单击“打开”。
  4. 将显示“打开”对话框。在此格式下指定您的开发计算机的名称,后跟您创建的共享名称:\\mycomputer\myshare
  5. 点击“确定”。

    根据您开发 PC 上的安全设置,在允许您访问共享之前,可能会提示您输入用户名和密码。

此时,您就可以将文件复制到开发 PC 上的共享和模拟器之间,以及从它们之间进行复制了。

注意 这些相同的复制文件方法在使用设备时同样有效,但有一个已知问题。Pocket PC 设备默认名称为“Pocket PC”。除非您更改此名称,否则您将无法访问共享。

在设备上进行测试

在设备上进行测试可以让您亲身体验应用程序的性能。使用 Visual Studio .NET,您可以通过 USB、串行或以太网连接到开发 PC 的设备上进行测试。

注意 使用以太网将您的设备连接到开发 PC。这是迄今为止测试和调试最快、最简单的方法。

部署到设备

您可以通过以下任何方式选择部署到设备:

  • 在 Visual Studio .NET 工具栏上,从“部署设备”组合框中选择“Pocket PC Device”。
  • 在“项目属性”对话框的“设备”页面下,从“部署设备”组合框中选择“Pocket PC Device”。
  • 从“属性”窗口,将项目的“部署设备”属性设置为“Pocket PC Device”。

调试您的应用程序

Visual Studio .NET IDE 提供的调试环境非常强大。它允许您暂停应用程序、查看其内部工作、修改代码、检查值并系统地单步执行应用程序。

调试功能的核心可以在 Visual Studio .NET IDE 的“调试”菜单中找到。从该菜单中,您可以启动和停止调试会话、设置断点以及在调试模式下浏览应用程序。

注意 断点会标识应用程序中的一行代码,您希望在遇到该行代码时暂停或中断应用程序的执行。

Visual Studio .NET 使您能够在开发 PC 的舒适环境中远程调试正在设备或模拟器上运行的应用程序。您可以使用命令窗口输入语句、查询和设置变量、执行代码行以及执行其他类似任务。

注意 为了获得最佳调试环境,请使用以太网将您的设备连接到 PC。

部署您的应用程序

为 .NET Compact Framework 应用程序创建安装程序与用于其他 Windows 应用程序的方法类似。应用程序安装程序通过 cabinet 文件分发,通常称为“CAB”文件(基于其 .cab 文件扩展名)。CAB 文件有两个目的:1) 它们压缩和存储文件,以便于分发;2) 它们确保正确处理应用程序所需的所有文件和设置。

需要什么?

使用 Visual Studio .NET 构建的应用程序要求目标设备上存在 .NET Compact Framework。此外,如果应用程序使用了 SQL Server CE,您还需要安装 SQL Server CE 组件。

您的安装例程需要考虑所有这些。它可能需要包含多个 CAB 文件:一个用于您的应用程序,第二个用于 .NET Compact Framework,以及 SQL Server CE CAB。

创建 CAB 文件

为应用程序创建 CAB 文件的最简单方法是让 Visual Studio .NET 完成所有工作。Visual Studio .NET 提供的一项功能是 IDE 中用于生成 CAB 文件的菜单项。

构建应用程序的 CAB 文件

  1. 在 Visual Studio .NET 中打开您的应用程序项目。
  2. 在“解决方案配置”下拉组合框中选择“Release”,如图 13 所示。

    图 13. 设置解决方案配置
  3. 在“生成”菜单上,单击“生成 CAB 文件”,如图 14 所示。
  4. 在构建应用程序时,将短暂显示几个命令窗口。当这些窗口关闭后,您的 CAB 文件就完成了。
    注意 不会显示任何消息或确认来告知您 CAB 文件已生成。在最后一个命令窗口关闭后,您将返回到 Visual Studio .NET 界面。

    图 14. “生成 CAB 文件”菜单项

CAB 文件输出

此 CAB 构建过程的输出存储在位于应用程序目录下的一个目录中。您将在子目录 \bin\release 下找到单独的 CAB 文件。图 15 显示了此层次结构的示例。

图 15. 通过 Visual Studio .NET 生成的 CAB 文件位置

在图 15 所示的示例中,生成了几个 CAB 文件,每个目标平台处理器类型一个。在此图中,您可以看到四个 CAB 文件,分别对应 StrongArm、MIPS、SH3 和 X86 处理器类型。这是因为部署设备是 Pocket PC,并且这四种处理器类型都支持该设备。

此时,您可以将相应的 CAB 文件复制到目标设备,在设备上打开文件资源管理器,点击您的 CAB 文件,您的应用程序就会安装。

注意 请记住,您的应用程序才能运行,您需要安装 .NET Compact Framework,如果需要,还要安装 SQL Server CE。

创建桌面安装程序

如果您的应用程序设置将通过桌面 PC,通过对接基座到设备进行,那么安装过程会稍微复杂一些。在这种情况下,您需要两个设置:一个用于桌面 PC,一个用于设备。设备设置是 CAB 文件。桌面设置是一个可执行文件,它执行两个功能。首先,它将您的 CAB 文件复制到桌面 PC。其次,它启动应用程序管理器 (CeAppMgr.exe)。应用程序管理器随后接管将您的 CAB 文件复制到设备并启动安装。

应用程序管理器负责在设备上添加和删除应用程序,以及删除从启动安装的 PC 上的应用程序文件。您使用 .ini 文件向应用程序管理器提供安装说明。

桌面安装程序可以使用任何允许您将 CAB 文件复制到 PC 然后启动应用程序管理器的应用程序来创建。两家公司,InstallShieldWise,提供商业级安装开发包,具有此功能。

Spb Software House 提供了一个名为 EZSetup 的免费安装产品。虽然此应用程序不如 InstallShield 和 Wise 的产品强大,但对于大多数设置来说,它的功能相当不错。

注意 如果您要编写自己的桌面安装程序,您需要找到应用程序管理器在安装 PC 上的位置。应用程序管理器的完整名称和路径存储在注册表值 HKLM\software\Microsoft\Windows\CurrentVersion\App Paths\CEAppMgr.exe 中。

摘要

.NET Compact Framework 为开发人员提供了一个强大的工具来创建强大的移动应用程序。它使您能够利用您现有的 .NET 技能来构建以 Pocket PC 和 Windows CE .NET 设备为目标的应用程序。

.NET Compact Framework 是 .NET Framework 的一个子集。虽然在外观和功能上与 .NET Framework 相似,但学习在 .NET Compact Framework 下进行编程需要时间和精力。您需要掌握 Windows CE 设备施加的限制以及创建移动应用程序所伴随的要求。

获取更多信息的途径

文章

入门

创建自定义控件

新闻组

  • microsoft.public.dotnet.framework.compactframework—关于使用 .NET Compact Framework 开发应用程序的信息
  • microsoft.public.pocketpc—与 Pocket PC 相关的通用信息
  • microsoft.public.pocketpc.developer—Pocket PC 开发人员信息
  • microsoft.public.sqlserver.ce—关于使用 Microsoft SQL Server CE 的信息
  • microsoft.public.webservices—关于开发 Web 服务的信息

网站

开发人员计划

  • Microsoft 的 Mobile Solution Partner Program 是一项全球性计划,旨在帮助您使用 Microsoft 移动软件开发尖端解决方案,并成功将其推向市场。
  • Microsoft 移动软件旨在实现出色的解决方案和服务,从而随时随地在任何设备上交付信息。
  • 加入 Microsoft 移动革命,扩展您的应用程序,连接新市场,并以令人兴奋的新方式进行创新,让人们生活和工作。
  • Microsoft 的 Mobile2Market Program 是一个全面的认证和交付 Pocket PC 和 Smartphone 移动应用程序的计划。Mobile2Market 旨在将独立软件供应商与移动运营商和零售商联系起来,通过为移动应用程序创造新的收入机会、缩短上市时间并为客户提供无缝的用户体验来加强和发展移动应用程序市场。

培训和入门计划

larryroof.com 提供移动应用程序设计和开发方面的培训和项目咨询。提供的服务包括 .NET Compact Framework 和 SQL Server CE 的 5 天培训课程、定制培训计划以及培训和项目咨询的组合,以帮助您快速实施有效的移动解决方案。

信息网站

  • gotdotnet.com 是 .NET Framework 的主页,包含 .NET Compact Framework 的一部分。
  • innovativedss.com 包含示例代码和开发人员论坛。
  • devbuzz.com 是一个开发人员网站,专注于 eMbedded Visual Basic 和 .NET Compact Framework;它包括文章、示例代码和论坛。

第三方控件和组件

  • DateTimePicker—虽然此控件由 .NET Framework 提供,但在 .NET Compact Framework 中缺失。来自 IntelliProg
  • HTMLViewer—支持显示 HTML 内容。来自 IntelliProg
  • RichInk—允许用户输入和编辑文本,同时提供高级格式设置功能以及对富文本格式和 Rich Ink 的支持。来自 IntelliProg
  • Pocket Outlook—此库允许用 .NET Compact Framework 编写的应用程序轻松访问和操作 Pocket Outlook 数据。有关更多信息,请参阅 inthehand.com
  • Pocket Access—此库使您能够将存储在 Pocket Access 数据库中的数据集成到 .NET Compact Framework 应用程序中。有关更多信息,请参阅 inthehand.com

链接

© . All rights reserved.