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

FishForm

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.21/5 (25投票s)

2004年5月24日

CPOL

8分钟阅读

viewsIcon

65821

downloadIcon

332

一款适用于 Pocket PC 的完整窗体设计器和数据采集应用程序。

在您的 Pocket PC 上设计窗体

然后使用它将数据捕获到 XML 文件数据库中

引言

FishForm 是一款完整的应用程序,用于在 Pocket PC 上使用 .NET Compact Framework 设计窗体并利用它们在现场采集数据。

我想为 Compact Framework 竞赛写一篇技术文章,但却苦于没有好的想法。我在网上冲浪时,看到了一则新闻,说非洲的组织正在村庄里使用 Pocket PC 进行医疗调查,因为 Pocket PC 比笔记本电脑更便携,而且更重要的是,更便宜。

我环顾了一下市面上的一些商业软件,用于制作 Pocket PC 调查问卷,发现它们都有一个共同点:你必须拥有一台桌面 PC 才能设计调查问卷和窗体。这意味着你不能在现场创建临时调查,而总是必须先返回“办公室”。

FishForm 允许您直接在 Pocket PC 本身上创建数据录入窗体,然后在同一个程序中,您可以使用这些窗体输入数据,这些数据将保存到标准的 XML 文件中,以便稍后集成到更大的数据库应用程序中。

虽然它可能用于调查,但我认为它对于任何需要在办公室外收集数据的通用场合都非常有用。例如,设备状况检查、餐厅评价,等等。

在开发这个项目时,我学到了许多关于在 Compact Framework 上编程的有益的知识,我希望通过展示如何在这个受限的环境中制作一个完整的应用程序,同时尽可能地遵循 .NET Framework 的限制。

在开始这项工作时,我对我的应用程序想要实现的功能、外观以及操作方式有一些明确的想法,但对 .NET Compact Framework 的了解却很少。最终,这完全是关于妥协,而不是关于我想让事情如何运作。

我花了很多时间来写这篇技术文章,因为我们公司将为我们的一个应用程序制作一个 Pocket PC 界面,我决定做一个完整的应用程序是了解它端到端流程的最佳方式,以防出现任何意外。到目前为止,我可能已经将每个类重写了至少两次,并且每天花了很多时间在互联网上搜索解决方法或实现我理所当然在常规 .NET Framework 中已经掌握的功能的方法。

如果您查看源代码,我会在必须进行妥协的地方或事情不如预期运行时添加大量注释。

程序的功能

  • ActiveSync 集成的安装和卸载程序。(从 PC 或 Pocket PC 直接安装)
  • 遵循 Microsoft Logo 指南(当然,.NET Compact Framework 有标准豁免)
  • 集成的 HTML 帮助和教程
  • 对于任何希望在现场将数据输入数据库的人都有用。
  • 帮助文件演示了如何将捕获的数据导入 Microsoft Access 数据库以进行报告和分析。

源代码的功能

技术文章的性质通常是有限地演示如何做某事。这通常是极好的,可以让你朝着正确的方向前进,但有时拥有一个完整的端到端工作应用程序同样有用,你可以拆解它,提取你认为有用的部分,看看它在实践中是如何工作的,而不是在虚构的示例中。我希望我的源代码能以这种方式提供帮助。我在任何复杂或有趣的地方都添加了大量注释,并尽可能使用了有意义的方法和字段名称。

从一个完整的应用程序中可以学到太多有用的东西,无法在此一一列举,但一些亮点包括:

  • 自定义控件 - 基于“Control”的设计组件。可选、可拖动、响应点击,可以看起来像复选框、单选按钮、组合框、单行编辑框、多行编辑框或标签。任何对学习如何制作自己的自定义控件感兴趣的人,其功能不仅仅是美观,而且确实有用,都应该在源代码中找到感兴趣的东西。
  • 软输入面板和滚动窗体 - 我见过的大多数文章只展示如何使用其中之一,而不是两者兼有,而这才是真正需要的。大多数人首先阅读的 MS 的 SIP 文章假设您可以轻松地从窗体底部删除 80 像素的空间,而不放置任何内容,在现实世界中这是一个可怕的妥协,因为您总是浪费了三分之一的屏幕空间。主数据录入窗体演示了一种通过在文本框获得焦点时自动启用 SIP,显示滚动条并将窗体自动变成可滚动窗体的方式,这样就不会遮挡任何内容,而且用户体验自然。
  • XML 文件 - 所有用户创建的窗体和输入的数据都存储在符合标准的 XML 文件中。我以前从未有理由这样做,而且有很多复杂的示例并没有真正说明问题。希望这里的源代码对于任何有兴趣学习如何做同样事情的人来说都更加直接。
  • 安装程序 - 虽然大部分是从本站和 GotDotNet.com 上的示例中借鉴的,但它有所不同,因为它实际上是可用的,并且是一个完整的示例。虽然这个安装程序并没有什么了不起,但它是一个完全工作的端到端示例,这一点很重要,因为许多展示如何做这件事的文章并不完整,甚至包含一些错误。有关编写 .NETCF 安装程序设置的更多详细信息,请参阅 CodeProject 上的这篇文章
  • 帮助系统 - 虽然 .NET Compact Framework 应用程序在帮助系统方面豁免于常规 Logo 要求,但这并不意味着您不需要制作一个。我演示了一种调用外部 HTML 文件以显示上下文帮助的方法。

编写自己的 .NET 应用程序的顶级技巧

您开始规划您的应用程序之前,请阅读 Microsoft 的 Logo 要求

阅读 .NET Compact Framework 开发 常见问题解答页面

请勿假设您在常规 .NET Framework 中习惯使用的每个类在 Compact Framework 中都会以相同的方式工作。它们都更受限制。例如,请看 Label 类成员的文档页面。请注意,每个成员都明确说明了它是否受 .NET Compact Framework 支持,在这种情况下,Label 的任何事件都不受 Compact Framework 支持。每个组件都有局限性,请务必先查看。

阅读有关使用 p/invoke 调用本机 Windows 函数的知识,在许多情况下,这是完成某些任务的唯一方法。您可以在 此处找到一篇有用的文章。

请勿假设在模拟器上运行正常的东西在实际设备上也会正常运行。这绝对不是真的,两者之间存在巨大差异。举个例子:在模拟器上,您总是可以可靠地知道用户单击了哪个位置来调用弹出菜单。在实际设备上,相同的代码无法正常工作,似乎是一个半承认的错误。我发现模拟器和我的 V37 Pocket PC 之间存在差异。差异如此之多,我只能建议,如果您正在编写一个严肃的应用程序,那么在每个阶段都有真实的设备进行测试是无可替代的。我写了*大量*代码,假设模拟器已经足够好,结果当我第一次决定在真实设备上测试时,我发现我不得不丢弃很多代码,然后重新开始。

注意 OpenNetCF Smart Device Framework:“Smart Device Framework 丰富和扩展了 .NET Compact Framework,提供了 .NET Compact Framework 中没有的丰富类和控件。” 我为这个项目避免使用它,因为我想尽可能地坚持标准框架,但如果我正在开发一个商业应用程序,我会认真考虑它,因为它填补了标准 Compact Framework 中所有缺失的小空白。

在您的计算机上编译项目需要进行的更改

在构建解决方案之前,您需要在“BuildCab”文件夹中的两个文件中进行手动更改,以指示您解压项目文件夹的路径。

在我的开发系统上,项目文件夹位于“C:\data\projects\FishForm\”。

  1. FishForm\BuildCab\BuildCab.bat - 将上述路径的两个出现项更改为您项目的本地路径。
  2. FishForm_PPC.inf - 更改 [Strings] 部分中名为“WHERE_I_PUT_THE_FISHFORM_PROJECT_FOLDER”的令牌,将其指向您项目的本地路径。

就这样!您现在应该可以在 Visual Studio 中执行“全部重新生成”操作,以完成程序和安装文件的构建。

历史

  • 版本 1.0 - 2004 年 5 月 19 日
© . All rights reserved.