更新迁移到 .NET Framework 4 的 Outlook 项目中的窗体区域

如果带有窗体区域的 Outlook 外接程序项目的目标框架更改为 .NET Framework 4,则必须对生成的窗体区域代码和在运行时实例化某些窗体区域类的任何代码进行一些更改。

更新生成的窗体区域代码

如果项目的目标框架更改为 .NET Framework 4,则必须更改生成的窗体区域代码。 对于使用 Visual Studio 设计的窗体区域和从 Outlook 导入的窗体区域,进行的更改是不同的。 有关这些窗体区域类型之间的差异的更多信息,请参见创建 Outlook 窗体区域

更新使用 Visual Studio 设计的窗体区域的生成代码

  1. 在代码编辑器中打开窗体区域代码隐藏文件。 此文件名为您的窗体区域.Designer.cs 或您的窗体区域.Designer.vb。 若要在 Visual Basic 项目中查看此文件,请单击**“解决方案资源管理器”中的“显示所有文件”**按钮。

  2. 修改窗体区域类的声明,以便它派生自 FormRegionBase 而不是 Microsoft.Office.Tools.Outlook.FormRegionControl

  3. 修改窗体区域类的构造函数,如下面的代码示例所示。

    下面的代码示例显示针对 .NET Framework 3.5 的项目中的窗体区域类的构造函数。

    Public Sub New(ByVal formRegion As Microsoft.Office.Interop.Outlook.FormRegion)
        MyBase.New(formRegion)
        Me.InitializeComponent()
    End Sub
    
    public FormRegion1(Microsoft.Office.Interop.Outlook.FormRegion formRegion)
        : base(formRegion)
    {
        this.InitializeComponent();
    }
    

    下面的代码示例演示针对 .NET Framework 4 的项目中的窗体区域类的构造函数。

    Public Sub New(ByVal formRegion As Microsoft.Office.Interop.Outlook.FormRegion)
        MyBase.New(Globals.Factory, formRegion)
        Me.InitializeComponent()
    End Sub
    
    public FormRegion1(Microsoft.Office.Interop.Outlook.FormRegion formRegion)
        : base(Globals.Factory, formRegion)
    {
        this.InitializeComponent();
    }
    
  4. 修改 InitializeManifest 方法的签名,如下所示。 确保不要修改该方法中的代码;此代码代表在设计器中应用的窗体区域设置。 在 Visual C# 项目中,必须展开名为“Form Region Designer generated code”的区域才能查看此方法。

    下面的代码示例演示针对 .NET Framework 3.5 的项目中的 InitializeManifest 方法的签名。

    Private Shared Sub InitializeManifest(ByVal manifest As Microsoft.Office.Tools.Outlook.FormRegionManifest)
    
        ' Do not change code in this method.
    End Sub
    
    private static void InitializeManifest(Microsoft.Office.Tools.Outlook.FormRegionManifest manifest)
    {
        // Do not change code in this method.
    }
    

    下面的代码示例演示针对 .NET Framework 4 的项目中的 InitializeManifest 方法的签名。

    Private Shared Sub InitializeManifest(ByVal manifest As Microsoft.Office.Tools.Outlook.FormRegionManifest, 
        ByVal factory As Microsoft.Office.Tools.Outlook.Factory)
    
        ' Do not change code in this method.
    End Sub
    
    private static void InitializeManifest(Microsoft.Office.Tools.Outlook.FormRegionManifest manifest, 
        Microsoft.Office.Tools.Outlook.Factory factory)
    {
        // Do not change code in this method.
    }
    
  5. 向项目中添加新的 Outlook 窗体区域项。 打开新窗体区域的代码隐藏文件,在文件中找到您的新窗体区域Factory 和 WindowFormRegionCollection 类,将这些类复制到剪贴板。

  6. 删除添加到项目的新窗体区域。

  7. 在您更新以在重新针对的项目中工作的窗体区域代码隐藏文件中,找到您的原始窗体区域Factory 和 WindowFormRegionCollection 类,将它们替换为从新窗体区域复制的代码。

  8. 在您的新窗体区域Factory 和 WindowFormRegionCollection 类中,搜索对您的新窗体区域类的所有引用,将每个引用更改为您的原始窗体区域类。 例如,如果您更新的窗体区域名为 SalesDataFormRegion 而您在步骤 5 中创建的新窗体区域名为 FormRegion1,则将 FormRegion1 的所有引用更改为 SalesDataFormRegion。

更新从 Outlook 导入的窗体区域的生成代码

  1. 在代码编辑器中打开窗体区域代码隐藏文件。 此文件名为您的窗体区域.Designer.cs 或您的窗体区域.Designer.vb。 若要在 Visual Basic 项目中查看此文件,请单击**“解决方案资源管理器”中的“显示所有文件”**按钮。

  2. 修改窗体区域类的声明,以便它派生自 ImportedFormRegionBase 而不是 Microsoft.Office.Tools.Outlook.ImportedFormRegion

  3. 修改窗体区域类的构造函数,如下面的代码示例所示。

    下面的代码示例显示针对 .NET Framework 3.5 的项目中的窗体区域类的构造函数。

    Public Sub New(ByVal formRegion As Microsoft.Office.Interop.Outlook.FormRegion)
        MyBase.New(formRegion)
    End Sub
    
    public ImportedFormRegion1(Microsoft.Office.Interop.Outlook.FormRegion formRegion)
        : base(formRegion)
    {
        this.FormRegionShowing += new System.EventHandler(this.TaskFormRegion_FormRegionShowing);
        this.FormRegionClosed += new System.EventHandler(this.TaskFormRegion_FormRegionClosed);
    }
    

    下面的代码示例演示针对 .NET Framework 4 的项目中的窗体区域类的构造函数的签名。

    Public Sub New(ByVal formRegion As Microsoft.Office.Interop.Outlook.FormRegion)
        MyBase.New(Globals.Factory, formRegion)
    End Sub
    
    public ImportedFormRegion1(Microsoft.Office.Interop.Outlook.FormRegion formRegion)
        : base(Globals.Factory, formRegion)
    {
        this.FormRegionShowing += new System.EventHandler(this.TaskFormRegion_FormRegionShowing);
        this.FormRegionClosed += new System.EventHandler(this.TaskFormRegion_FormRegionClosed);
    }
    
  4. 对于实例化窗体区域类中的控件的 InitializeControls 方法中的每行代码,按如下所示修改代码。

    下面的代码示例演示如何初始化针对 .NET Framework 3.5 的项目中的控件。 在此代码中,GetFormRegionControl 方法具有指定返回的控件类型的类型参数。

    Me.olkTextBox1 = Me.GetFormRegionControl(Of Microsoft.Office.Interop.Outlook.OlkTextBox)("OlkTextBox1")
    
    this.olkTextBox1 = this.GetFormRegionControl<Microsoft.Office.Interop.Outlook.OlkTextBox>("OlkTextBox1");
    

    下面的代码示例演示如何初始化针对 .NET Framework 4 的项目中的控件。 在此代码中,GetFormRegionControl 方法没有类型参数。 您必须将返回值强制转换为正在初始化的控件的类型。

    Me.olkTextBox1 = CType(GetFormRegionControl("OlkTextBox1"), Microsoft.Office.Interop.Outlook.OlkTextBox)
    
    this.olkTextBox1 = (Microsoft.Office.Interop.Outlook.OlkTextBox)GetFormRegionControl("OlkTextBox1");
    
  5. 向项目中添加新的 Outlook 窗体区域项。 打开新窗体区域的代码隐藏文件,在文件中找到您的新窗体区域Factory 和 WindowFormRegionCollection 类,将这些类复制到剪贴板。

  6. 删除添加到项目的新窗体区域。

  7. 在您更新以在重新针对的项目中工作的窗体区域代码隐藏文件中,找到您的原始窗体区域Factory 和 WindowFormRegionCollection 类,将它们替换为从新窗体区域复制的代码。

  8. 在您的新窗体区域Factory 和 WindowFormRegionCollection 类中,搜索对您的新窗体区域类的所有引用,将每个引用更改为您的原始窗体区域类。 例如,如果您更新的窗体区域名为 SalesDataFormRegion 而您在步骤 5 中创建的新窗体区域名为 FormRegion1,则将 FormRegion1 的所有引用更改为 SalesDataFormRegion。

实例化窗体区域类

您必须修改动态实例化某些窗体区域类的任何代码。 在针对 .NET Framework 3.5 的项目中,可以直接实例化窗体区域类,例如 Microsoft.Office.Tools.Outlook.FormRegionManifest。 在针对 .NET Framework 4 的项目中,这些类是不能直接实例化的接口。

如果项目的目标框架已更改为 .NET Framework 4,则必须使用 Globals.Factory 属性提供的方法实例化这些接口。 有关 Globals.Factory 属性的更多信息,请参见 对 Office 项目中对象的全局访问

下表列出窗体区域类型和用于实例化针对 .NET Framework 4 的项目中的类型的方法。

类型

要使用的工厂方法

FormRegionCustomAction

CreateFormRegionCustomAction()

FormRegionInitializingEventArgs

CreateFormRegionInitializingEventArgs

FormRegionManifest

CreateFormRegionManifest

请参见

概念

将 Office 解决方案迁移到 .NET Framework 4

其他资源

创建 Outlook 窗体区域