次の方法で共有


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

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

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

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

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

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

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

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

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

InfoPath 2013

InfoPath 2010

前途

PowerPoint

プロジェクト

Visio

ワード
ICustomTaskPaneConsumer このインターフェイスを実装して、カスタム作業ウィンドウを作成します。 エクセル

前途

PowerPoint

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

IBlogExtensibilityEncryptionProviderSignatureProviderなど、Microsoft Office で定義されているその他の機能拡張インターフェイスがいくつかあります。 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ですが、コードを変更することでコントロールを追加できます。

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