Larry Roof
适用于:
Microsoft?.NET 框架压缩版 1.0
Microsoft Visual Studio.NET 2003
摘要:了解如何使用 InTheHand Pocket Outlook .NET 组件。
| 简介 | |
| Pocket Outlook 对象模型 | |
| 从 .NET 框架压缩版访问 POOM | |
| 使用任务 | |
| 使用联系人 | |
| 小结 |
Microsoft?Pocket Outlook 是一组应用程序,包含在与每台 Pocket PC 捆绑在一起的软件中。这组应用程序包括日历、联系人、收件箱、备注和任务应用程序。
虽然就其功能而言,这些应用程序能够完整且良好地独立运行,但它们更适合于与其更大、更著名的桌面等效程序 Microsoft Outlook 结合使用。位于这两个 PIM 应用程序平台之间的是动态同步,它的固有职责就是处理 Microsoft Outlook 与 Pocket Outlook 应用程序之间的数据同步。
从开发观点来看,Pocket Outlook 提供了两个机会。首先,它提供了一个具体数据的储备库:联系人、约会和任务。其次,它带有自动同步功能,使您完全不必担心这些数据如何在设备及其关联的个人计算机之间移动。
应用程序通过 Pocket Outlook 对象模型(简称为 POOM)来访问 Pocket Outlook 数据。该库基于 COM,它提供了一个对象层次结构,从而简化了创建、修改和显示约会、任务和联系人的过程。
问题在于与 Microsoft eMbedded Visual C++? 或 Microsoft eMbedded Visual Basic? 不同,面向 .NET 框架压缩版的应用程序本身不能访问 COM 库,如 POOM。
对于所有 Microsoft .NET 框架压缩版应用程序要访问 COM 的情形,解决办法是创建一个非 COM 动态链接库,即 DLL。该 DLL 充当了 .NET 框架压缩版应用程序与 COM 对象之间的沟通媒介。该 DLL 是使用 eMbedded Visual C++ 编写的,正如我前面所述,后者可以直接访问 COM 对象,包括 POOM。该 DLL 公开一个标准的 .NET 框架压缩版友好接口,您可以从应用程序中对该接口进行 PInvoke 调用。
好了,如果此刻您还拿不准的话,说明这不是一个简单的过程。它要求对 eMbedded Visual C++、Pocket Outlook 对象模型、创建 DLL 以及从 .NET 框架压缩版应用程序对 DLL 进行 PInvoke 调用等方面都具有详细的了解。如果花费足够的时间和精力,您有可能凭借自己的力量完成这些工作。幸运的是,有两种辅助工具可以大大缩短这一过程:GotDotNet 网站上的 POOM 示例以及 InTheHand 所提供的 Pocket Outlook .NET 组件。
POOM 示例演示了如何创建使用 eMbedded Visual C++ 编写的 DLL。您可以学会如何从基于 .NET 框架压缩版的应用程序调用该 DLL。尽管该示例的功能比较有限(仅提供对联系人的访问),但它确实说明了从基于 .NET 框架压缩版的应用程序中利用 POOM 这一方法背后的要点和概念。
该示例的一个缺点是它完全使用 C(C++ 或 C#)编写的。将 .NET CF 组件转换到 Visual Basic .NET 不是一项普通的任务,而将 C++ DLL 转换到任何其他对象都是不可取的。
可以下载该 POOM 示例。
.NET CF 开发人员可以采用的第二个选择是 InTheHand(一家专门从事 .NET 框架压缩版开发的软件开发企业)的 Pocket Outlook .NET 组件。Pocket Outlook .NET 是一组 .NET 框架压缩版类,通过这些类可以对 Pocket Outlook 的“约会”、“联系人”和“任务”功能进行完整的读/写访问。
与 GotDotNet 示例应用程序不同,Pocket Outlook .NET 是一个库 DLL,可以将其添加到 .NET 框架压缩版项目中,从而提供健壮的对象层次结构。这可以极大地简化将 POOM 合并到应用程序中的过程。
Pocket Outlook .NET 库支持数据绑定,因此可以使用标准的 .NET 框架压缩版组件(如 DataGrid 和 ComboBox)快速生成支持 PIM 的应用程序。
从我的观点来看,当您需要处理 Pocket Outlook 数据时,Pocket Outlook .NET 是正确的途径。它易于使用,能够提供正确的功能集,并且价格合理(即使对最小型的开发企业也是如此)。这是一个很棒的产品。实际上,本白皮书其余部分的所有示例和教程都利用了 Pocket Outlook .NET。
有关该产品的详细信息,请参阅 www.inthehand.com。
如前所述,有两种从 .NET 框架压缩版访问 POOM 的方法。第一种方法涉及到创建自己的本机代码 DLL。详细介绍该方法超出了本白皮书的范围,因为它太复杂了。
第二种方法是利用 InTheHand 提供的 Pocket Outlook .NET 组件。下面的所有示例和教程都利用了该组件。您需要下载并安装该组件,以便理解或利用本白皮书其余部分所演示的任何技术。
在下载并安装 Pocket Outlook .NET 组件以后,需要执行以下几个步骤,以便在基于 .NET 框架压缩版的应用程序中利用该组件:
1. | 添加对 Pocket Outlook .NET 组件的引用。 |
2. | 导入 Pocket Outlook 命名空间 |
3. | 定义 OutlookApplication 对象 |
要完成这一首要步骤,请执行下列操作:
1. | 打开项目,在解决方案资源管理器窗口中,用鼠标右键单击 References 文件夹。 |
2. | 从弹出菜单中选择 Add Reference 。 |
3. | 将显示 Add Reference 对话框。从该对话框顶部的列表中,选择 InTheHand.PocketOutlook。 |
4. | 单击 Select 按钮。InTheHand.PocketOutlook 组件将被添加到该对话框底部的 Selected Components 窗口中,如图 1 所示。 |
5. | 单击 OK 按钮,就会将该引用添加到项目中。 |

图 1. 添加对 Pocket Outlook .NET 组件的引用
需要执行的第二步是在窗体模块的顶部添加一个 Imports 语句。要完成该操作,请执行下列步骤:
1. | 打开窗体的代码窗口。 |
2. | 导航到代码窗口的顶部。 |
3. | 向模块中添加如清单 1 中所示的一行代码。 |
清单 1. 导入 Pocket Outlook 命名空间。
Imports InTheHand.PocketOutlook
您需要执行的第三步是为 OutlookApplication 对象声明一个变量。该对象是 Pocket Outlook 对象模型的接口。必须始终将其包含在应用程序中。
清单 2 提供了一个为该对象声明一个变量的示例。通常情况下,该声明将发生在应用程序的模块级或项目级,以便能够在较大范围内使用 OutlookApplication。
清单 2. 声明 OutlookApplication 对象变量
[at the module level] Dim poApplication As New OutlookApplication
注:当该行代码执行时,应用程序将自动登录到 Pocket Outlook 数据源。与直接使用 POOM(此时,在执行任何任务之前都需要登录)不同,InTheHand Pocket Outlook .NET 组件为您执行该步骤。
Pocket Outlook .NET 组件的安装程序包包含一个标题为“Object Model Documentation”的帮助文件。安装过程将创建指向该文档的快捷方式。要访问该文档,请执行下列步骤:
1. | 单击 Start 菜单。 |
2. | 从 Start 菜单中选择 Programs。 |
3. | 从 Programs 中选择 InTheHand。 |
4. | 从 InTheHand 中选择 Pocket Outlook .NET Wrapper。 |
5. | 从 Pocket Outlook .NET Wrapper 中选择指向 Object Model Documentation 的快捷方式。 |
该帮助系统概述了整个 Pocket Outlook .NET 组件中提供的对象层次结构。它并不适合作为方法指南,而只能充当参考资料。如果您要寻找方法指南资料,则本白皮书的其余部分将非常适合您,能够从如何使用 Pocket Outlook 任务开始。
Pocket Outlook .NET 组件提供了使用以下三方面 Pocket Outlook 数据的功能:任务、联系人和约会。我们将从任务开始讨论该组件。
从开发人员的观点来看,可以出于多种目的使用任务。例如,可以在维护应用程序内使用任务来记录要完成的后续工作。在信息传递系统中,可以使用任务来标注下一次要传递的项目。CRM 应用程序可以记录要为特定客户执行的步骤。
通过 InTheHand Pocket Outlook .NET 组件提供的任务功能的核心是 Tasks 属性和 Task 对象。接下来,我们将详细讨论这些项目中的每一个。
OutlookApplication 对象的 Tasks 属性提供了对驻留在设备上的任务集合的访问。实际上,Tasks 属性是通过 POOM 提供的 Tasks 文件夹。该属性链接到包含所有任务的项目集合。
我们将在本节后面的部分查看几个示例,其中 Tasks 属性及其项目集合被用来检索任务。
需要通过 Task 对象来使用各个任务。该对象的常用属性显示在表 1 中。该 Task 对象的常用方法显示在表 2 中。
| 表 1. Task 对象的常用属性 | |
| 属性 | 说明 |
Body | 任务所附备注的文本 |
Categories | 分配给任务的类别 |
Complete | 任务是否已完成 |
DateCompleted | 任务的完成日期 |
DueDate | 任务的截止日期 |
Importance | 任务的重要性 |
IsRecurring | 任务是一次性的还是反复发生的 |
Oid | 任务的唯一标识符 |
ReminderSet | 是否就该任务提醒用户 |
StartDate | 任务的开始日期 |
Subject | 任务的主题 |
表 2. Task 对象的常用方法
| 方法 | 说明 |
Copy | 创建现有任务的副本 |
Delete | 删除任务 |
Display | 使用本机 Task 接口显示任务 |
Save | 将修改保存到任务 |
虽然上述表格可以作为很好的参考资料,但下面提供的一组实用示例将详细介绍经常执行的与任务相关的操作。
涉及任务的最常见功能之一是检索任务。可以用多种方式检索任务:
| • | 检索所有任务的集合 |
| • | 检索所有任务的子集 |
| • | 检索单个任务 |
我们将首先考虑如何检索所有任务,因为这是一种常用的方法,并且是检索任务的最简单方法。清单 3 提供了一个简单示例,该示例检索驻留在某个设备上的所有任务。
清单 3. 检索所有任务
Imports InTheHand.PocketOutlook [at the module level] Dim poApplication As New OutlookApplication Dim myTasks As OutlookItemCollection Private Sub btnLoad_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnLoad.Click ' Retrieve all of the tasks. myTasks = poApplication.Tasks.Items End Sub
该示例的主要部分包括:
| • | Imports 语句,该语句必须位于模块的顶部 |
| • | OutlookApplication 对象的声明语句 |
| • | OutlookItemCollection 对象的声明,该对象可以保存任何 Outlook 项目的集合。在本例中,它将保存任务集合。 |
| • | 将任务集合从 OutlookApplication 对象 poApplication 加载到 OutlookItemCollection myTasks 中。 |
此时,集合 myTasks 包含一组任务对象,分别对应于驻留在测试设备上的各个任务。可以对该集合进行循环处理以传播 ListBox 或 ComboBox,还可以查看特定任务信息或者引用该集合内的特定任务。
有时需要检索特定任务。这可能是任务子集,甚至也可能是单个任务。使用 Items 集合的 Restrict 方法可以轻松地做到这一点。
清单 4 演示了如何检索任务子集。该示例仅检索那些类别为“demo”的任务。
清单 4. 检索所选任务
Imports InTheHand.PocketOutlook
[at the module level]
Dim poApplication As New OutlookApplication
Dim myTasks As OutlookItemCollection
Private Sub btnSelect_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnSelect.Click
Dim strCategory As String
Dim strQuery As String
' Retrieve the selected tasks.
strCategory = "demo"
strQuery = "[Categories] = " & ControlChars.Quote & strCategory & _
ControlChars.Quote
myTasks = poApplication.Tasks.Items.Restrict(strQuery)
End Sub
大部分准备工作与检索所有任务所需的准备工作完全相同。仍然需要添加 Imports 语句,声明 OutlookApplication 对象变量,以及声明 OutlookItemCollection 变量。
位于清单 4 底部附近的代码用于仅选择我们感兴趣的任务。我们生成了一个查询字符串,它只是一个 SQL SELECT 语句的 WHERE 部分。该查询字符串随后用在 Restrict 方法中,以便只检索我们感兴趣的任务。
注:可以根据通过 Task 对象提供的任意属性来限制任务。
通过 POOM 提供的绝妙功能之一是能够在 Pocket Outlook 数据的本机应用程序界面中显示这些数据。也就是说,其显示效果就像用户已经进入 Task 应用程序并选择查看特定任务一样。
POOM 包含一个名为 Display 的方法,该方法是通过 Pocket Outlook .NET 组件提供的。清单 5 演示了如何使用该方法。
清单 5. 显示任务
Imports InTheHand.PocketOutlook [at the module level] Dim poApplication As New OutlookApplication Dim myTasks As OutlookItemCollection Private Sub btnDisplay_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnDisplay.Click Dim myTask As Task ' Retrieve all of the tasks. myTasks = poApplication.Tasks.Items ' Display the first task. myTask = myTasks.Item(0) myTask.Display() End Sub
与前面的两个示例一样,首先要添加 Imports 语句,并声明 OutlookApplication 和 OutlookItemCollection 变量。
在清单 5 的底部,您将看到我们首先检索所有任务。从该任务集合中,我们将单个任务(即第一个任务)提取到 Task 对象变量中。该对象提供了 Display 方法,该方法随后被调用以显示所选任务。
添加新任务的过程包含三个步骤。首先,需要创建一个新任务。其次,新任务需要进行配置。第三,新任务需要保存。清单 6 演示了如何添加任务。
清单 6. 添加任务
Imports InTheHand.PocketOutlook
[at the module level]
Dim poApplication As New OutlookApplication
Private Sub btnAdd_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnAdd.Click
Dim myTask As Task
' Create a new task.
myTask = poApplication.CreateTask
' Configure the task.
With myTask
.Body = "This is a sample task."
.Categories = "demo"
.DueDate = Today.Date
.Importance = Importance.High
.ReminderOptions = ReminderOptions.Dialog
.ReminderSet = True
.StartDate = Today.Date
.Subject = "sample task"
' Finally, save the task.
.Save()
End With
End Sub
与前面的所有示例一样,首先要添加 Imports 语句,并声明 OutlookApplication 和 OutlookItemCollection 变量。
在清单 6 的底部,您将看到我描述过的三个步骤。首先,使用 OutlookApplication 对象的 CreateTask 方法来创建我们的新任务。其次,加载该新任务的属性。第三,调用 Task 对象的 Save 方法来保存该任务。
修改任务与添加任务类似,只不过这次不是创建新任务,而是将现有任务加载到 Task 对象中。清单 7 说明了如何修改任务。
清单 7. 修改任务
Imports InTheHand.PocketOutlook
[at the module level]
Dim poApplication As New OutlookApplication
Dim myContacts As OutlookItemCollection
Private Sub btnModify_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnModify.Click
Dim myTask As Task
' Retrieve all of the tasks.
myContacts = poApplication.Tasks.Items
' Modify the first task.
myTask = myTasks.Item(0)
With myTask
.Body = "This is updated content."
.Save()
End With
End Sub
这一次仍然要首先添加 Imports 语句,并声明 OutlookApplication 和 OutlookItemCollection 变量。在清单 7 的底部,您将看到在何处首先检索该任务(与所有其他任务一起),然后再将其加载到 Task 对象中。此时,您就可以修改该 Task 对象的任何属性了。通过调用该 Task 对象的 Save 方法,完成修改过程。
注:本节中演示的所有示例都包含在可供下载的 Tasks 项目中。您需要下载并安装 InTheHand 的 Pocket Outlook .NET 组件,以便使用这些示例。
第二种对开发人员有用的 Pocket Outlook 数据是联系人。联系人为开发人员提供了各种应用机会。它们提供了一种将联系人数据合并到移动应用程序的简单方法,从而避免了开发自己的联系人代码所需的开销。
像任务一样,联系人也提供了 Categories 属性,该属性可用来标识特别适用于您的应用程序的联系人。联系人可通过 Pocket Outlook .NET 组件的 Contacts 属性和 Contact 对象访问。下面分别介绍了这些项目。
OutlookApplication 对象的 Contacts 属性提供了对驻留在设备上的联系人集合的访问。该属性提供了到 POOM(联系人驻留在其内部)内的 Contacts 文件夹的接口。
本节中提供的几个示例演示了在使用联系人时,如何将 Contacts 属性及其项目集合一起使用。
与联系人本身有关的所有工作都是通过 Contact 对象处理的。表 3 显示了该对象的常用属性。表 4 显示了 Contact 对象的常用方法。
表 3. Contact 对象的常用属性
| 属性 | 说明 |
Body | 联系人所附带的备注 |
BusinessAddressCity | 联系人地址的城市部分 |
BusinessAddressState | 联系人地址的州(省/自治区)部分 |
BusinessAddressStreet | 联系人地址的街道部分 |
BusinessFaxNumber | 联系人的传真号码 |
BusinessTelephoneNumber | 联系人的办公电话号码 |
Categories | 分配给联系人的类别 |
CompanyName | 联系人的公司名称 |
EmailAddress1 | 联系人的电子邮件地址 |
FileAs | 联系人的归档方式;通常按姓氏排序 |
MobileTelephoneNumber | 联系人的移动电话号码 |
表 4. Contact 对象的常用方法
| 方法 | 说明 |
Copy | 创建现有联系人的副本 |
Delete | 删除联系人 |
Display | 使用本机 Contact 接口显示联系人 |
Save | 将修改保存到联系人 |
尽管您将发现这两个表格都可用作参考,但以下几个部分以及相应的示例将提供快速入门方法,以便您将联系人数据合并到应用程序中。
尽管您的应用程序通常不会检索所有联系人的列表(除非您要创建一个完善的 Contact 应用程序),但在本节的开头我仍然要向您说明如何实现该任务。就像任务一样,可以用多种方式检索联系人:
| • | 检索所有联系人的集合 |
| • | 检索所有联系人的子集 |
| • | 检索单个联系人 |
清单 8 演示了如何检索所有联系人。请注意,根据驻留在设备上的联系人数量的不同,这可能会产生相当大的集合。
清单 8. 检索所有联系人
Imports InTheHand.PocketOutlook [at the module level] Dim poApplication As New OutlookApplication Dim myContacts As OutlookItemCollection Private Sub btnLoad_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnLoad.Click ' Retrieve all of the contacts. myContacts = poApplication.Contacts.Items End Sub
该示例的主要部分包括:
| • | Imports 语句,该语句必须位于模块的顶部 |
| • | OutlookApplication 对象的声明语句 |
| • | OutlookItemCollection 对象的声明,该对象保存了任何 Outlook 项目的集合。在该示例中,它是联系人集合。 |
将联系人集合从 OutlookApplication 对象 poApplication 加载到 OutlookItemCollection myContacts 中。
此时,集合 myContacts 包含一组联系人对象,分别对应于驻留在测试设备上的各个联系人。像任何集合一样,可以对该集合进行循环处理来访问各个联系人以及查看特定的联系人信息。
对于联系人,更常见的情况是需要检索所有联系人的子集,而不是检索所有联系人。该子集可能只包含那些以字母“A”开头的联系人,甚至可能限定为单个联系人。
使用 Items 集合的 Restrict 方法,可以很方便地检索联系人的子集。清单 16 演示了如何使用该方法。在该示例中,只返回那些以字母“A”开头的联系人。
清单 9. 检索联系人的子集
Imports InTheHand.PocketOutlook
[at the module level]
Dim poApplication As New OutlookApplication
Dim myContacts As OutlookItemCollection
Private Sub btnSelect_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnSelect.Click
Dim strA As String = "A"
Dim strB As String = "B"
Dim strQuery As String
' Retrieve contacts that begin with the letter A.
strQuery = "[FileAs] >= " & ControlChars.Quote & strA & _
ControlChars.Quote
strQuery = strQuery & " AND [FileAs] < " & strB & _
cmbPrefix.Items(cmbPrefix.SelectedIndex + 1) & ControlChars.Quote
myContacts = poApplication.Contacts.Items.Restrict(strQuery)
End Sub
大部分准备工作与检索所有联系人所需的准备工作完全相同。仍然需要 Imports 语句,并且声明 OutlookApplication 和 OutlookItemCollection 这两个对象。
这些有趣的代码显示在清单 9 的底部。这里我们构建了一个查询字符串,该字符串限制仅返回那些以字母“A”开头的联系人。在将该字符串应用于 Restrict 方法时,仅提供我们感兴趣的那些联系人。
注:可以使用通过 Contact 对象提供的任何属性来限制联系人。虽然通常是使用 FileAs 属性,但并未限制您只能使用该属性。
正如您已经在任务的使用方法中看到的,POOM 提供了通过应用程序方便地访问和利用数据类型的本机应用程序界面的功能。用户所看到的联系人显示在典型的联系人界面中。
该功能是通过 Contact 对象的 Display 方法提供的。清单 10 显示了一个使用该技术的示例。
清单 10. 显示联系人
Imports InTheHand.PocketOutlook [at the module level] Dim poApplication As New OutlookApplication Dim myContacts As OutlookItemCollection Private Sub btnDisplay_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnDisplay.Click Dim myContact As Contact ' Retrieve all of the contacts. myContacts = poApplication.Contacts.Items ' Display the first contact. myContact = myContacts.Item(0) myContact.Display() End Sub
像前面的两个联系人示例一样,需要在模块中添加 Imports 语句以及 OutlookApplication 和 OutlookItemCollection 这两个变量的声明。
在清单 10 的底部,您将看到我们首先检索了所有联系人。您可以使用联系人的子集甚至单个联系人作为起点。我选择在此演示所有联系人的原因在于它是最容易理解的。
从该联系人集合中,我们将单个联系人(第一个联系人)提取到它自己的 Contact 对象中。我们就是通过该 Contact 对象来访问 Display 方法的,该方法随后被调用以显示所选的联系人。
添加联系人的过程包含三个步骤。首先,创建新的联系人。其次,配置该联系人。第三,保存该联系人。清单 11 演示了如何添加联系人。
清单 11. 添加联系人
Imports InTheHand.PocketOutlook
[at the module level]
Dim poApplication As New OutlookApplication
Private Sub btnAdd_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnAdd.Click
Dim myContact As Contact
' Create a new contact.
myContact = poApplication.CreateContact
' Configure the contact.
With myContact
.Birthday = CDate("01/01/1960")
.Body = "This is a sample contact."
.BusinessTelephoneNumber = "888-555-0001"
.Categories = "demo"
.CompanyName = "Acme"
.Email1Address = "joe.acme@acme.com"
.FileAs = "Acme, Joe"
.FirstName = "Joe"
.LastName = "Acme"
.Title = "President"
' Finally, save the contact.
.Save()
End With
End Sub
与前面的所有联系人示例一样,首先需要添加 Imports 语句,并声明 OutlookApplication 和 OutlookItemCollection 变量。
在清单 11 的底部,您将看到我描述过的三个步骤。首先,调用 OutlookApplication 对象的 CreateContact 方法来创建新联系人。其次,对新联系人的属性进行配置。第三,调用 Contact 对象的 Save 方法来保存该联系人。
修改联系人与添加联系人类似,只不过这次不是创建新联系人,而是从现有联系人加载 Contact 对象。清单 12 演示了这一过程。
清单 12. 修改现有联系人
Imports InTheHand.PocketOutlook
[at the module level]
Dim poApplication As New OutlookApplication
Dim myContacts As OutlookItemCollection
Private Sub btnModify_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnModify.Click
Dim myContact As Contact
' Retrieve all of the contacts.
myContacts = poApplication.Contacts.Items
' Modify the first contact.
myContact = myContacts.Item(0)
With myContact
.BusinessTelephoneNumber = "888-555-0001"
.Save()
End With
End Sub
与前面的所有联系人示例一样,我们首先添加 Imports 语句,并且声明 OutlookApplication 和 OutlookItemCollection 变量。在清单 19 的底部,您会发现首先检索联系人的位置。在该示例中,检索了所有联系人,但只有第一个联系人被加载到 Contact 对象中。从这里开始,您可以随意修改该 Contact 对象的任何属性。我们通过调用该 Contact 对象的 Save 方法,完成了修改过程。
注:本节中演示的所有示例都包含在可供下载的 Contacts 项目中。您需要下载并安装 InTheHand 的 Pocket Outlook .NET 组件,以便使用这些示例。
Pocket Outlook 中存储的数据为开发人员提供了大量的机会。从使用基于 .NET 框架压缩版的应用程序编写的移动解决方案中,可以利用这一包含联系人、约会和任务数据的储备库。
应用程序通过 Pocket Outlook 对象模型来访问 Pocket Outlook 数据。要访问这一基于 COM 的库,您必须创建一个非 COM 动态链接库,或者求助于第三方组件,如 InTheHand 的 Pocket Outlook .NET。
获取其他信息的途径
文章
Programming with eMbedded Visual Basic and the Pocket Outlook Object Model
Programming Your Own Contacts Application with eMbedded Visual Basic
新闻组
microsoft.public.dotnet.framework.compactframework
microsoft.public.pocketpc.developer - 适合于 Pocket PC 开发人员的信息
网站
信息网站
MSDN Mobile and Embedded Developer Center
培训和快速入门程序
Larryroof.com — 提供有关设计和开发移动应用程序方面的培训和项目咨询。提供的服务包括:为期五天的培训课程,内容包括 .NET 框架压缩版、Microsoft SQL Server??CE 和 Pocket Outlook 对象模型;自定义的培训程序;将培训与项目咨询结合起来,帮助您快速实现高效的移动解决方案。