機能拡張インターフェイスを使用して UI 機能をカスタマイズする

Visual Studio に含まれる Office 開発ツールは、VSTO アドインにおけるカスタム作業ウィンドウ、リボンのカスタマイズ、および Outlook フォーム領域の作成に使用可能な、多数の実装の詳細を処理するクラスとデザイナーを提供します。 ただし、特別な要件がある場合、各機能の 拡張インターフェイス を自分で実装することもできます。

適用対象: このトピックの情報は、VSTO アドイン プロジェクトに適用されます。 詳細については、「Office アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。

Microsoft Office は、COM VSTO アドインがリボンなどの特定の機能をカスタマイズするために実装可能な、機能拡張インターフェイスのセットを定義します。 これらのインターフェイスは、アクセスを提供する機能に対するフル コントロールを提供します。 ただし、これらのインターフェイスを実装するには、マネージド コードにおける COM 相互運用性について一定の知識が必要です。 これらのインターフェイスのプログラミング モデルは、.NET Framework に慣れた開発者にとって直観的でない場合もあります。

Visual Studio に含まれる Office プロジェクト テンプレートを使用して VSTO アドインを作成する場合、リボンなどの機能をカスタマイズするために機能拡張インターフェイスを実装する必要はありません。 Visual Studio Tools for Office Runtime では、これらのインターフェイスが実装されます。 代わりに、Visual Studio が提供する、より直観的なクラスおよびデザイナーを使用することもできます。 ただし、必要に応じて、機能拡張インターフェイスを直接 VSTO アドインに実装することもできます。

これらの機能に関して Visual Studio で提供されているクラスとデザイナーの詳細については、「カスタム作業ウィンドウ」、「リボン デザイナー」、および「Outlook フォーム領域の作成」を参照してください。

VSTO アドインに実装できる機能拡張インターフェイス

次の表に、実装可能な機能拡張インターフェイスとそれらをサポートするアプリケーションを示します。

Interface 説明 アプリケーション
IRibbonExtensibility このインターフェイスを実装してリボン UI をカスタマイズします。 注: プロジェクトにリボン (XML) 項目を追加して、VSTO アドインに既定の IRibbonExtensibility 実装を生成できます。 詳細については、「 Ribbon XML」を参照してください。 Excel

InfoPath 2013

InfoPath 2010

Outlook

PowerPoint

Project

Visio

Word
ICustomTaskPaneConsumer このインターフェイスを実装してカスタム作業ウィンドウを作成します。 Excel

Outlook

PowerPoint

Word
FormRegionStartup このインターフェイスを実装して Outlook フォーム領域を作成します。 Outlook

Microsoft Office で定義されている機能拡張インターフェイスには他に、 IBlogExtensibilityEncryptionProvider、および SignatureProviderがあります。 Visual Studio では、Office プロジェクト テンプレートを使用して VSTO アドインにこれらのインターフェイスを実装することはサポートされていません。

機能拡張インターフェイスを使用する

機能拡張インターフェイスを使用して UI をカスタマイズするには、VSTO アドイン プロジェクトに適切なインターフェイスを実装します。 次に、そのインターフェイスを実装するクラスのインスタンスを返すために、 RequestService メソッドをオーバーライドします。

Outlook 用 VSTO アドインで、IRibbonExtensibilityICustomTaskPaneConsumer、および FormRegionStartup インターフェイスを実装する方法を示したサンプル アプリケーションについては、「Office 開発のサンプル」の UI マネージャーのサンプルを参照してください。

機能拡張インターフェイスの実装例

次のコード例は、カスタム作業ウィンドウを作成するための ICustomTaskPaneConsumer インターフェイスの簡単な実装を示します。 この例では、2 つのクラスを定義しています。

  • TaskPaneHelper クラスは、カスタム作業ウィンドウの作成と表示を行うための ICustomTaskPaneConsumer を実装します。

  • TaskPaneUI クラスは、作業ウィンドウの UI を提供します。 TaskPaneUI クラスの属性により、クラスが COM に対して可視化され、Microsoft Office アプリケーションがクラスを発見することができるようになります。 この例で、UI は空の UserControlですが、コードを修正してコントロールを追加できます。

    Note

    TaskPaneUI クラスを COM に公開するには、プロジェクトの [COM の相互運用機能の登録] プロパティを設定する必要もあります。

    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");
                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
    {
    }
    

ICustomTaskPaneConsumer の実装について詳しくは、Microsoft Office ドキュメントの「2007 Office システムでのカスタム作業ウィンドウの作成」をご覧ください。

RequestService メソッドのオーバーライド例

次のコード例は、前のコード例から RequestService クラスのインスタンスを返すために TaskPaneHelper メソッドをオーバーライドする方法を示します。 serviceGuid パラメーターの値を検査し、要求されているインターフェイスを特定して、そのインターフェイスを実装するオブジェクトを返します。

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);
}