演练:设计 Outlook 窗体区域

自定义窗体区域可以扩展标准的或自定义的 Microsoft Office Outlook 窗体。 在此演练中,您将设计一个作为新页出现在联系人项的检查器窗口中的自定义窗体区域。 此窗体区域通过将地址信息发送到 Windows Live Local Search 网站,显示为联系人列出的每个地址的地图。 有关窗体区域的信息,请参见 创建 Outlook 窗体区域

**适用于:**本主题中的信息适用于 Outlook 2007 和 Outlook 2010 的应用程序级项目。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能

本演练阐释了以下任务:

  • 创建新的 Outlook 外接程序项目。

  • 将窗体区域添加到外接程序项目中。

  • 设计窗体区域的布局。

  • 自定义窗体区域的行为。

  • 测试 Outlook 窗体区域。

提示

以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。 您安装的 Visual Studio 版本以及使用的设置决定了这些元素。 有关更多信息,请参见 使用设置

系统必备

您需要以下组件来完成本演练:

-

Visual Studio 2010 的一个版本,其中包含 Microsoft Office 开发工具。有关更多信息,请参见[将计算机配置为开发 Office 解决方案](bb398242\(v=vs.100\).md)。
  • Microsoft Office Outlook 2007 或 Outlook 2010。

链接到视频 有关该主题的视频版本,请参见 Video How to: Designing an Outlook Form Region(视频帮助:设计 Outlook 窗体区域)。

创建新的 Outlook 外接程序项目

首先创建一个基本的外接程序项目。

创建新的 Outlook 外接程序项目

  1. 在 Visual Studio 中,创建一个名为 MapItAddIn 的 Outlook 外接程序项目。

  2. 在**“新建项目”对话框中选择“创建解决方案的目录”**。

  3. 将此项目保存到任意目录中。

    有关更多信息,请参见如何:在 Visual Studio 中创建 Office 项目

向 Outlook 外接程序项目添加窗体区域

Outlook 外接程序解决方案可以包含一个或多个 Outlook 窗体区域项。 请使用**“新建 Outlook 窗体区域”**向导将窗体区域项添加到项目。

向 Outlook 外接程序项目添加窗体区域

  1. 在**“解决方案资源管理器”中选择“MapItAddIn”**项目。

  2. 在**“项目”菜单上,单击“添加新项”**。

  3. 在**“添加新项”对话框中选择“Outlook 窗体区域”,将该文件命名为 MapIt,然后单击“添加”**。

    **“新建 Outlook 窗体区域”**向导启动。

  4. 在**“选择窗体区域的创建方式”页上,单击“设计新的窗体区域”,然后单击“下一步”**。

  5. 在**“选择要创建的窗体区域的类型”页上,单击“独立”,然后单击“下一步”**。

    一个独立的窗体区域将一个新页添加到 Outlook 窗体中。 有关窗体区域类型的更多信息,请参见创建 Outlook 窗体区域

  6. 在**“提供说明性文本并选择显示首选项”页上,在“名称”**框中键入 Map It。

    在打开联系人项时,该名称会出现在检查器窗口的功能区中。

  7. 选择**“撰写模式下的检查器”“读取模式下的检查器”,然后单击“下一步”**。

  8. 在**“标识将显示此窗体区域的邮件类”页上,清除“邮件”,选择“联系人”,然后单击“完成”**。

    MapIt.cs 或 MapIt.vb 文件将添加到项目中。

设计窗体区域的布局

使用窗体区域设计器可直观地开发窗体区域。 可以将托管控件拖放到窗体区域设计器图面上。 使用该设计器和**“属性”**窗口可以调整控件的布局和外观。

设计窗体区域的布局

  1. 在**“解决方案资源管理器”中展开“MapItAddIn”**项目,然后双击“MapIt.cs”或“MapIt.vb”以打开窗体区域设计器。

  2. 右击设计器,再单击**“属性”**。

  3. 在**“属性”窗口中,将“大小”**设置为“664, 469”。

    这可以确保窗体区域的大小足够显示地图。

  4. 在**“视图”菜单上单击“工具箱”**。

  5. 从**“工具箱”“公共控件”选项卡中,将“WebBrowser”**添加到窗体区域。

    **“WebBrowser”**将显示为联系人列出的每个地址的地图。

自定义窗体区域的行为

通过向窗体区域事件处理程序中添加代码,可以自定义窗体区域在运行时的工作方式。 对于此窗体区域,代码将检查 Outlook 项的属性,并确定是否显示“Map It”窗体区域。 如果显示该窗体区域,则代码将导航至 Windows Live Local Search,并加载 Outlook 联系人项中列出的每个地址的地图。

自定义窗体区域的行为

  1. 在**“解决方案资源管理器”中右击“MapIt.cs”或“MapIt.vb”,然后单击“查看代码”**。

    MapIt.cs 或 MapIt.vb 将在代码编辑器中打开。

  2. 展开**“窗体区域工厂”**代码区域。

    出现一个名为 MapItFactory 的窗体区域工厂类。

  3. 将下面的代码添加到 MapItFactory_FormRegionInitializing 事件处理程序中。 当用户打开联系人项时,将调用此事件处理程序。 下面的代码确定联系人项是否包含地址。 如果联系人项不包含地址,这段代码会将 FormRegionInitializingEventArgs 类的 Cancel 属性设置为 true,并且不显示窗体区域。 否则,外接程序将引发 FormRegionShowing 事件并显示窗体区域。

    Private Sub MapItFactory_FormRegionInitializing(ByVal sender As Object, ByVal e As Microsoft.Office.Tools.Outlook.FormRegionInitializingEventArgs) Handles Me.FormRegionInitializing
    
        Dim myItem As Outlook.ContactItem = CType(e.OutlookItem, Outlook.ContactItem)
    
        If Not (myItem Is Nothing) Then
            If Not (myItem.BusinessAddress Is Nothing) AndAlso myItem.BusinessAddress.Trim().Length > 0 Or (Not (myItem.HomeAddress Is Nothing) AndAlso myItem.HomeAddress.Trim().Length > 0) Or (Not (myItem.OtherAddress Is Nothing) AndAlso myItem.OtherAddress.Trim().Length > 0) Then
                Return
            End If
        End If
    
        e.Cancel = True
    
    End Sub
    
    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;
    }
    
  4. 将下面的代码添加到 FormRegionShowing 事件处理程序中。 这段代码执行下列任务:

    • 将联系人项中的每个地址连接起来并创建一个 URL 字符串。

    • 调用 WebBrowser 对象的 Navigate 方法,并将此 URL 字符串作为参数传递。

    Local Search 网站将出现在“Map It”窗体区域,并且在缓冲存储区中显示每个地址。

    Private Sub MapIt_FormRegionShowing(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.FormRegionShowing
        Dim tempLoc As String = ""
        Dim defaultAddress As String = ""
        Dim scratchPadAddress As String = ""
    
        Dim myItem As Outlook.ContactItem = _
            CType(Me.OutlookItem, Outlook.ContactItem)
    
        If Not (myItem Is Nothing) Then
            If Not (myItem.HomeAddress Is Nothing) And _
                myItem.HomeAddress.Trim().Length > 0 Then
                tempLoc = myItem.HomeAddressStreet.Trim() + " " _
                    + myItem.HomeAddressCity + " " + myItem.HomeAddressState + _
                        " " + myItem.HomeAddressPostalCode
                If myItem.HomeAddress = myItem.MailingAddress Then
                    defaultAddress = tempLoc + "_Home"
                Else
                    scratchPadAddress += "adr." + tempLoc + "_Home~"
                End If
            End If
            If Not (myItem.BusinessAddress Is Nothing) And _
                myItem.BusinessAddress.Trim().Length > 0 Then
                tempLoc = myItem.BusinessAddressStreet.Trim() + " " _
                    + myItem.BusinessAddressCity + " " + _
                        myItem.BusinessAddressState + " " + _
                            myItem.BusinessAddressPostalCode
                If myItem.BusinessAddress = myItem.MailingAddress Then
                    defaultAddress = tempLoc + "_Business"
                Else
                    scratchPadAddress += "adr." + tempLoc + "_Business~"
                End If
            End If
            If Not (myItem.OtherAddress Is Nothing) And _
                myItem.OtherAddress.Trim().Length > 0 Then
                tempLoc = myItem.OtherAddressStreet.Trim() + " " + _
                    myItem.OtherAddressCity + " " + myItem.OtherAddressState + _
                        " " + myItem.OtherAddressPostalCode
                If myItem.OtherAddress = myItem.MailingAddress Then
                    defaultAddress = tempLoc + "_Other"
                Else
                    scratchPadAddress += "adr." + tempLoc + "_Other~"
                End If
            End If
        End If
    
        WebBrowser1.Navigate(("http://local.live.com/default.aspx?style=r&where1=" _
            + defaultAddress + "&sp=" + scratchPadAddress))
    
    End Sub
    
    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”窗体区域

  1. 按 F5 运行项目。

    Outlook 即会打开。

  2. 在 Outlook 中,通过执行下列任务之一创建联系人:

    • 在 Outlook 2010 中的**“主页”选项卡上,单击“新建项目”,然后单击“联系人”**。

    • 在 Outlook 2007 中的**“文件”菜单上,指向“新建”,然后单击“联系人”**。

  3. 在联系人窗体中,键入 Ann Beebe 作为联系人姓名,然后指定以下三个地址。

    地址类型

    地址

    办公

    4567 Main St. Buffalo, NY

    主页

    1234 North St. Buffalo, NY

    其他

    3456 Main St. Seattle, WA

  4. 保存联系人项,然后将其关闭。

  5. 重新打开**“Ann Beebe”**联系人项。

  6. 在该项的功能区的**“显示”组中,单击“Map It”**以打开“Map It”窗体区域。

    “Map It”窗体区域将出现,并显示 Local Search 网站。 “办公”、**“家庭”“其他”**地址出现在缓冲存储区中。 在缓冲存储区中,选择希望在地图上显示的地址。

后续步骤

有关如何自定义 Outlook 应用程序用户界面的更多信息,请参见以下主题:

请参见

任务

演练:导入在 Outlook 中设计的窗体区域

如何:向 Outlook 外接程序项目中添加窗体区域

如何:防止 Outlook 显示窗体区域

如何:访问显示窗体区域的 Outlook 项

概念

在运行时访问窗体区域

Outlook 窗体区域创建准则

将窗体区域与 Outlook 邮件类关联

Outlook 窗体区域中的自定义操作

其他资源

创建 Outlook 窗体区域