Partager via


Personnaliser les fonctionnalités de l’interface utilisateur à l’aide d’interfaces d’extensibilité

Les outils de développement Office dans Visual Studio fournissent des classes et des concepteurs qui gèrent de nombreux détails d’implémentation lorsque vous les utilisez pour créer des volets Office personnalisés, des personnalisations du ruban et des zones de formulaire Outlook dans un complément VSTO. Toutefois, vous pouvez également implémenter l’interface d’extensibilité pour chaque fonctionnalité vous-même si vous avez des exigences particulières.

S’applique à : Les informations contenues dans cette rubrique s’appliquent aux projets de complément VSTO. Pour plus d’informations, consultez Fonctionnalités disponibles par type d’application et de projet Office.

Microsoft Office définit un ensemble d’interfaces d’extensibilité que les compléments COM VSTO peuvent implémenter pour personnaliser certaines fonctionnalités, telles que le ruban. Ces interfaces fournissent un contrôle total sur les fonctionnalités auxquels elles fournissent l’accès. Toutefois, l’implémentation de ces interfaces nécessite une connaissance de l’interopérabilité COM dans le code managé. Dans certains cas, le modèle de programmation de ces interfaces n’est pas non plus intuitif pour les développeurs habitués au .NET Framework.

Lorsque vous créez un complément VSTO à l’aide des modèles de projet Office dans Visual Studio, vous n’avez pas besoin d’implémenter les interfaces d’extensibilité pour personnaliser des fonctionnalités comme le ruban. Visual Studio Tools pour Office runtime implémente ces interfaces pour vous. Au lieu de cela, vous pouvez utiliser des classes et des concepteurs plus intuitifs fournis par Visual Studio. Toutefois, vous pouvez toujours implémenter les interfaces d’extensibilité directement dans votre complément VSTO si vous le souhaitez.

Pour plus d’informations sur les classes et les concepteurs que Visual Studio fournit pour ces fonctionnalités, consultez les volets Office personnalisés, le concepteur de ruban et la création de zones de formulaire Outlook.

Interfaces d’extensibilité que vous pouvez implémenter dans un complément VSTO

Le tableau suivant répertorie les interfaces d’extensibilité que vous pouvez implémenter et les applications qui les prennent en charge.

Interface Descriptif Applications
IRibbonExtensibility Implémentez cette interface pour personnaliser l’interface utilisateur du ruban. Note: Vous pouvez ajouter un élément de ruban (XML) à un projet pour générer une implémentation par défaut IRibbonExtensibility dans votre complément VSTO. Pour plus d’informations, consultez le code XML du ruban. Excel

InfoPath 2013

InfoPath 2010

Outlook

PowerPoint

Projet

Visio

Mot
ICustomTaskPaneConsumer Implémentez cette interface pour créer un volet Office personnalisé. Excel

Outlook

PowerPoint

Mot
FormRegionStartup Implémentez cette interface pour créer une zone de formulaire Outlook. Outlook

Il existe plusieurs autres interfaces d’extensibilité définies par Microsoft Office, telles que IBlogExtensibility, EncryptionProvideret SignatureProvider. Visual Studio ne prend pas en charge l’implémentation de ces interfaces dans un complément VSTO créé à l’aide des modèles de projet Office.

Utiliser des interfaces d’extensibilité

Pour personnaliser une fonctionnalité d’interface utilisateur à l’aide d’une interface d’extensibilité, implémentez l’interface appropriée dans votre projet de complément VSTO. Remplacez ensuite la RequestService méthode pour retourner une instance de la classe qui implémente l’interface.

Pour obtenir un exemple d’application qui montre comment implémenter les interfaces IRibbonExtensibility, ICustomTaskPaneConsumer et FormRegionStartup dans un complément VSTO pour Outlook, consultez l’exemple UI Manager dans les exemples de développement Office.

Exemple d’implémentation d’une interface d’extensibilité

L’exemple de code suivant illustre une implémentation simple de l’interface ICustomTaskPaneConsumer pour créer un volet Office personnalisé. Cet exemple définit deux classes :

  • La TaskPaneHelper classe implémente ICustomTaskPaneConsumer pour créer et afficher un volet Office personnalisé.

  • La TaskPaneUI classe fournit l’interface utilisateur du volet Office. Les attributs de la TaskPaneUI classe rendent la classe visible par COM, ce qui permet aux applications Microsoft Office de découvrir la classe. Dans cet exemple, l’interface utilisateur est vide UserControl, mais vous pouvez ajouter des contrôles en modifiant le code.

    Note

    Pour exposer la TaskPaneUI classe à COM, vous devez également définir la propriété Register for COM Interop pour le projet.

    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
    {
    }
    

Pour plus d’informations sur l’implémentation ICustomTaskPaneConsumer, consultez Créer des volets Office personnalisés dans le système Office 2007 dans la documentation Microsoft Office.

Exemple de substitution de la méthode RequestService

L’exemple de code suivant montre comment remplacer la RequestService méthode pour retourner une instance de la TaskPaneHelper classe à partir de l’exemple de code précédent. Il vérifie la valeur du paramètre serviceGuid pour déterminer l’interface demandée, puis retourne un objet qui implémente cette interface.

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