自定义窗体区域扩展标准或自定义Microsoft Office Outlook 窗体。 在本教程中,你将设计一个自定义的窗体区域,该区域在联系人项的检查器视图中显示为一个新页面。 该表单区域通过将地址信息发送给 Windows Live 本地搜索网站,以显示联系人列出的每个地址的地图。 有关窗体区域的信息,请参阅 “创建 Outlook 窗体区域”。
适用于: 本主题中的信息适用于 Outlook 的 VSTO 外接程序项目。 有关详细信息,请参阅 Office 应用程序和项目类型提供的功能。
本演练阐释了以下任务:
创建新的 Outlook VSTO 外接程序项目。
将窗体区域添加到 VSTO 外接程序项目。
设计表单区域的布局。
自定义窗体区域的行为。
测试 Outlook 窗体区域。
注释
以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。 这些元素取决于你所使用的 Visual Studio 版本和你所使用的设置。 有关详细信息,请参阅个性化设置 Visual Studio IDE。
先决条件
你需要满足以下条件才能完成本演练:
包含 Microsoft Office 开发人员工具的 Visual Studio 版本。 有关详细信息,请参阅 配置计算机以开发 Office 解决方案。
Outlook 2010 或更高版本。
有关本主题的视频版本,请参阅 视频教程:设计 Outlook 表单区域。
创建新的 Outlook VSTO 外接程序项目
首先创建基本的 VSTO 外接程序项目。
创建新的 Outlook VSTO 外接程序项目
在 Visual Studio 中,创建名为 MapItAddIn 的 Outlook VSTO 外接程序项目。
在“ 新建项目 ”对话框中, 选择“为解决方案创建目录”。
将项目保存到任何目录。
有关详细信息,请参阅 如何:在 Visual Studio 中创建 Office 项目。
将窗体区域添加到 Outlook VSTO 外接程序项目
Outlook VSTO 外接程序解决方案可以包含一个或多个 Outlook 表单区域项。 使用 “新建 Outlook 窗体区域 ”向导将窗体区域项添加到项目。
将窗体区域添加到 Outlook VSTO 插件项目
在 解决方案资源管理器中,选择 MapItAddIn 项目。
在 “项目 ”菜单上,单击“ 添加新项”。
在“ 添加新项 ”对话框中,选择 Outlook 窗体区域,将文件命名 为 MapIt,然后单击“ 添加”。
NewOutlook 窗体区域向导将启动。
在 “选择要如何创建窗体区域 ”页上,单击“ 设计新窗体区域”,然后单击“ 下一步”。
在 “选择要创建窗体区域的类型 ”页上,单击“ 分隔”,然后单击“ 下一步”。
单独的窗体区域向 Outlook 窗体添加新页面。 有关窗体区域类型的详细信息,请参阅 创建 Outlook 窗体区域。
在提供描述性文本并选择显示首选项页上,在名称框中键入Map It。
当联系人项目打开时,此名称将显示在检查窗口的工具栏上。
选择 处于撰写模式 的 检查器和处于读取模式的检查器,然后单击“ 下一步”。
在标识将显示此表单区域的邮件类页上,取消选择邮件消息,选择联系人,然后单击完成。
MapIt.cs或MapIt.vb文件将添加到项目中。
设计窗体区域的布局
使用 窗体区域设计器直观地开发窗体区域。 可以将托管控件拖到窗体区域设计器界面。 使用设计器和 “属性” 窗口调整控件布局和外观。
设计窗体区域的布局
在 解决方案资源管理器中,展开 MapItAddIn 项目,然后双击 MapIt.cs 或 MapIt.vb 打开窗体区域设计器。
右键单击设计器,然后单击“ 属性”。
在 “属性” 窗口中,将 “大小 ”设置为 664、469。
这可确保窗体区域足够大,以显示地图。
在 “视图 ”菜单上,单击“ 工具箱”。
在工具箱的“常见控件”选项卡中,将 WebBrowser 添加到窗体区域。
WebBrowser 将显示联系人列出的每个地址的地图。
自定义窗体区域的行为
将代码添加到窗体区域事件处理程序,以自定义窗体区域在运行时的行为方式。 对于此窗体区域,代码将检查 Outlook 项目的属性,并确定是否显示“地图它”窗体区域。 如果显示窗体区域,代码会导航到 Windows Live 本地搜索,并加载 Outlook 联系人项中每个地址的地图。
自定义表单区域的行为
在 解决方案资源管理器中,右键单击 MapIt.cs 或 MapIt.vb,然后单击“ 查看代码”。
MapIt.cs 或 MapIt.vb 将在代码编辑器中打开。
展开 “窗体区域工厂 代码”区域。
名为
MapItFactory的窗体区域工厂类已公开。将以下代码添加到
MapItFactory_FormRegionInitializing事件处理程序。 当用户打开联系人项时,将调用此事件处理程序。 以下代码确定联系人项是否包含地址。 如果联系人项目不包含地址,则此代码将 Cancel 类的属性 FormRegionInitializingEventArgs 设置为 true ,并且不会显示窗体区域。 否则,VSTO 外接程序将引发 FormRegionShowing 事件并显示窗体区域。private void MapItFactory_FormRegionInitializing(object sender, Microsoft.Office.Tools.Outlook.FormRegionInitializingEventArgs e) { Outlook.ContactItem myItem = (Outlook.ContactItem)e.OutlookItem; if (myItem != null) { if ((myItem.BusinessAddress != null && myItem.BusinessAddress.Trim().Length > 0) || (myItem.HomeAddress != null && myItem.HomeAddress.Trim().Length > 0) || (myItem.OtherAddress != null && myItem.OtherAddress.Trim().Length > 0)) { return; } } e.Cancel = true; }将以下代码添加到 FormRegionShowing 事件处理程序。 此代码执行以下任务:
连接联系人项中的每个地址并创建 URL 字符串。
调用WebBrowser对象的Navigate方法,并将 URL 字符串作为参数传递。
本地搜索网站出现在“地图”窗体区域中,并在草稿板上列出每个地址。
private void MapIt_FormRegionShowing(object sender, EventArgs e) { string tempLoc = ""; string defaultAddress = ""; string scratchPadAddress = ""; Outlook.ContactItem myItem = (Outlook.ContactItem)this.OutlookItem; if (myItem != null) { if (myItem.HomeAddress != null && myItem.HomeAddress.Trim().Length > 0) { tempLoc = myItem.HomeAddressStreet.Trim() + " " + myItem.HomeAddressCity + " " + myItem.HomeAddressState + " " + myItem.HomeAddressPostalCode; if (myItem.HomeAddress == myItem.MailingAddress) { defaultAddress = tempLoc + "_Home"; } else { scratchPadAddress += "adr." + tempLoc + "_Home~"; } } if (myItem.BusinessAddress != null && myItem.BusinessAddress.Trim().Length > 0) { tempLoc = myItem.BusinessAddressStreet.Trim() + " " + myItem.BusinessAddressCity + " " + myItem.BusinessAddressState + " " + myItem.BusinessAddressPostalCode; if (myItem.BusinessAddress == myItem.MailingAddress) { defaultAddress = tempLoc + "_Business"; } else { scratchPadAddress += "adr." + tempLoc + "_Business~"; } } if (myItem.OtherAddress != null && myItem.OtherAddress.Trim().Length > 0) { tempLoc = myItem.OtherAddressStreet.Trim() + " " + myItem.OtherAddressCity + " " + myItem.OtherAddressState + " " + myItem.OtherAddressPostalCode; if (myItem.OtherAddress == myItem.MailingAddress) { defaultAddress = tempLoc + "_Other"; } else { scratchPadAddress += "adr." + tempLoc + "_Other~"; } } } webBrowser1.Navigate("http://local.live.com/default.aspx?style=r&where1=" + defaultAddress + "&sp=" + scratchPadAddress); }
测试 Outlook 表单区域
运行项目时,Visual Studio 将打开 Outlook。 打开联系人项以查看“Map It”表单区域。 “Map It”窗体区域会作为任何包含地址的联系人条目的页面显示。
测试“Map It”表单区域
按 F5 运行项目。
Outlook 随即打开。
在 Outlook 的“ 开始 ”选项卡上,单击“ 新建项目”,然后单击“ 联系人”。
在联系人窗体中,键入 Ann Beebe 作为联系人姓名,然后指定以下三个地址。
地址类型 地址 业务 4567 主街布法罗, 纽约 主页 1234 北圣布法罗, 纽约 其他 3456 Main St. Seattle, WA 保存并关闭联系人项目。
重新打开 Ann Beebe 联系人项。
在 Outlook 中,可以通过打开联系人通讯簿或在搜索人员中键入 Ann Beebe,在“查找”组中完成此作。
在项目功能区的“显示”组中,单击“地图应用”以打开地图应用窗体区域。
"“Map It”窗体区域出现,并显示“Local Search”网站。" 业务地址、家庭地址和其他地址出现在暂存板中。 在暂存板中,选择要映射的地址。
后续步骤
可以从以下主题详细了解如何自定义 Outlook 应用程序的 UI:
- 若要了解如何自定义 Outlook 项目的功能区,请参阅 “自定义 Outlook 功能区”。