共用方式為


使用擴充性介面自訂 UI 功能

更新:2007 年 11 月

適用於

本主題中的資訊僅適用於指定的 Visual Studio Tools for Office 專案和 Microsoft Office 版本。

專案類型

  • 應用程式層級專案

Microsoft Office 版本

  • 2007 Microsoft Office system

如需詳細資訊,請參閱依應用程式和專案類型提供的功能

Visual Studio Tools for Office 所提供的類別 (Class) 與設計工具可在您用來建立應用程式層級增益集的自訂工作窗格、功能區自訂與 Outlook 表單區域時,協助您處理掉許多實作 (Implementation) 細節。但是,如果您有特別需要,也可以自行為每一項功能實作「擴充性介面」(Extensibility Interface)。

擴充性介面概觀

2007 Microsoft Office system 中的應用程式定義了一組擴充性介面,可供 COM 增益集實作來自訂特定使用者介面 (UI) 功能。Visual Studio Tools for Office 會簡化這個程序,它會為您實作這些介面,並提供一些類別與設計工具供您使用。但是,您也可以直接在增益集中實作擴充性介面。

如需 Visual Studio Tools for Office 針對這些功能所提供的類別與設計工具詳細資訊,請參閱自訂工作窗格概觀功能區設計工具建立 Outlook 表單區域

可在增益集中實作的擴充性介面

下表列出您可實作的擴充性介面以及支援這些介面的應用程式。

介面

說明

應用程式

Microsoft.Office.Core.IRibbonExtensibility

實作這個介面可以自訂功能區 UI。如需詳細資訊,請參閱 2007 Microsoft Office 文件中的 IRibbonExtensibility 物件

注意事項:
您可以將 [功能區 (XML)] 項目加入至專案以在增益集中產生預設的 Microsoft.Office.Core.IRibbonExtensibility 實作。如需詳細資訊,請參閱功能區 XML

Excel 2007

InfoPath 2007

Outlook 2007

PowerPoint 2007

Word 2007

Microsoft.Office.Core.ICustomTaskPaneConsumer

實作這個介面可以建立自訂工作窗格。如需詳細資訊,請參閱 2007 Microsoft Office 文件中的 ICustomTaskPaneConsumer 物件

Excel 2007

Outlook 2007

PowerPoint 2007

Word 2007

Microsoft.Office.Interop.Outlook.FormRegionStartup

實作這個介面可以建立 Outlook 表單區域。如需詳細資訊,請參閱 2007 Microsoft Office 文件中的 FormRegionStartup 介面

Outlook 2007

2007 Microsoft Office system 的應用程式還定義了其他好幾種擴充性介面,例如 Microsoft.Office.Core.IBlogExtensibilityMicrosoft.Office.Core.EncryptionProviderMicrosoft.Office.Core.SignatureProvider。Visual Studio Tools for Office 不支援在增益集中實作這些介面。

使用擴充性介面

若要使用擴充性介面來實作 UI 功能,請在您的增益集專案中實作適當的介面。接著,覆寫 RequestService 方法以傳回會實作這個介面的類別執行個體 (Instance)。

如需示範如何在 Excel 增益集中實作 Microsoft.Office.Core.IRibbonExtensibilityMicrosoft.Office.Core.ICustomTaskPaneConsumer 介面的範例應用程式,請參閱執行階段服務範例

擴充性介面的實作範例

下列程式碼範例示範 Microsoft.Office.Core.ICustomTaskPaneConsumer 介面的簡單實作,以建立自訂工作窗格。這個範例會定義兩個類別:

  • TaskPaneHelper 類別會實作 Microsoft.Office.Core.ICustomTaskPaneConsumer 以建立和顯示自訂工作窗格。

  • TaskPaneUI 類別會提供工作窗格的 UI。TaskPaneUI 類別的屬性 (Attribute) 會讓 COM 得知這個類別,進而使 Microsoft Office 應用程式發現這個類別。在這個範例中,UI 是一個空的 UserControl,但是您可以藉由修改程式碼來加入控制項。

    注意事項:

    若要將 TaskPaneUI 類別公開 (Expose) 至 COM,您必須同時設定專案的 [註冊 COM Interop] 屬性 (Property)。如需詳細資訊,請參閱 HOW TO:註冊 COM Interop 元件

Public Class TaskPaneHelper
    Implements Office.ICustomTaskPaneConsumer

    Friend taskPane As Office.CustomTaskPane

    Public Sub CTPFactoryAvailable(ByVal CTPFactoryInst As Office.ICTPFactory) _
        Implements Office.ICustomTaskPaneConsumer.CTPFactoryAvailable

        If CTPFactoryInst IsNot Nothing Then
            ' Create a new task pane.
            taskPane = CTPFactoryInst.CreateCTP( _
                "Microsoft.Samples.Vsto.VB.TaskPaneUI", "Contoso")
            taskPane.Visible = True
        End If
    End Sub
End Class

<System.Runtime.InteropServices.ComVisible(True)> _
<System.Runtime.InteropServices.ProgId("Microsoft.Samples.Vsto.VB.TaskPaneUI")> _
<System.Runtime.InteropServices.Guid("FFA0920E-F7A5-453d-8AB2-249F4C25B4B2")> _
Public Class TaskPaneUI
    Inherits UserControl
End Class
public class TaskPaneHelper : Office.ICustomTaskPaneConsumer
{
    internal Office.CustomTaskPane taskPane;

    public void CTPFactoryAvailable(Office.ICTPFactory CTPFactoryInst)
    {
        if (CTPFactoryInst != null)
        {
            // Create a new task pane.
            taskPane = CTPFactoryInst.CreateCTP(
                "Microsoft.Samples.Vsto.CS.TaskPaneUI",
                "Contoso", Type.Missing);
            taskPane.Visible = true;
        }
    }
}

[System.Runtime.InteropServices.ComVisible(true)]
[System.Runtime.InteropServices.ProgId("Microsoft.Samples.Vsto.CS.TaskPaneUI")]
[System.Runtime.InteropServices.Guid("FFA0920E-F7A5-453d-8AB2-249F4C25B4B2")]
public class TaskPaneUI : UserControl
{
}

如需實作 Microsoft.Office.Core.ICustomTaskPaneConsumer 的詳細資訊,請參閱 2007 Microsoft Office 文件中的在 2007 Office System 中建立自訂工作窗格

RequestService 方法的覆寫範例

下列程式碼範例示範如何覆寫 RequestService 方法以從上一個程式碼範例中傳回 TaskPaneHelper 類別的執行個體。它會檢查 serviceGuid 參數的值以判斷要求的擴充性介面為何,然後傳回實作該介面的物件。

Friend taskPaneHelper1 As TaskPaneHelper

Protected Overrides Function RequestService( _
    ByVal serviceGuid As Guid) As Object

    If (serviceGuid = GetType(Office.ICustomTaskPaneConsumer).GUID) Then
        If (taskPaneHelper1 Is Nothing) Then
            taskPaneHelper1 = New TaskPaneHelper()
        End If
        Return taskPaneHelper1
    End If

    Return MyBase.RequestService(serviceGuid)
End Function
internal TaskPaneHelper taskPaneHelper1;

protected override object RequestService(Guid serviceGuid)
{
    if (serviceGuid == typeof(Office.ICustomTaskPaneConsumer).GUID)
    {
        if (taskPaneHelper1 == null)
        {
            taskPaneHelper1 = new TaskPaneHelper();
        }
        return taskPaneHelper1;
    }

    return base.RequestService(serviceGuid);
}

請參閱

工作

執行階段服務範例

HOW TO:建立 Visual Studio Tools for Office 專案

概念

應用程式層級增益集程式設計

開發 Office 方案

AddIn 主項目

在應用程式層級增益集中呼叫其他 Office 方案的程式碼

應用程式層級增益集的架構