Condividi tramite


Personalizzazione delle funzionalità dell'interfaccia utente utilizzando le interfacce di estensibilità

Gli strumenti di sviluppo di Office in Visual Studio forniscono classi e finestre di progettazione che gestiscono molti dettagli di implementazione quando vengono utilizzate per creare riquadri attività personalizzati, personalizzazioni della barra multifunzione e aree di modulo di Outlook in un componente aggiuntivo a livello di applicazione. Tuttavia, se sono necessari requisiti speciali è anche possibile implementare l'interfaccia di estensibilità per ogni funzionalità.

Si applica a: le informazioni fornite in questo argomento sono valide per i progetti a livello di applicazione per Microsoft Office 2010 e Microsoft Office System 2007. Per ulteriori informazioni, vedere Funzionalità disponibili in base ai tipi di progetto e applicazioni di Office.

Cenni preliminari sulle interfacce di Extensibility

In Microsoft Office viene definito un set di interfacce di estensibilità che i componenti aggiuntivi COM possono implementare per personalizzare determinate funzionalità, ad esempio la barra multifunzione. Queste interfacce forniscono il controllo completo sulle funzionalità alle quali forniscono l'accesso. Tuttavia, l'implementazione di queste interfacce richiede una certa conoscenza dell'interoperabilità COM nel codice gestito. In alcuni casi, il modello di programmazione di queste interfacce non è nemmeno intuitivo per gli sviluppatori abituati a .NET Framework.

Quando si crea un componente aggiuntivo tramite i modelli di progetto di Office in Visual Studio, non è necessario implementare le interfacce di estensibilità per personalizzare funzionalità come la barra multifunzione. Queste interfacce vengono automaticamente implementate in Runtime di Visual Studio Tools per Office. Al contrario, è possibile utilizzare classi e finestre di progettazione più intuitive fornite da Visual Studio. Tuttavia, è anche possibile implementare le interfacce di estensibilità direttamente nel componente aggiuntivo, se si desidera.

Per ulteriori informazioni sulle classi e sulle finestre di progettazione fornite da Visual Studio per queste funzionalità, vedere Cenni preliminari sui riquadri attività personalizzati, Finestra di progettazione della barra multifunzione e Creazione di aree di modulo di Outlook.

Interfacce di Extensibility implementabili in un componente aggiuntivo

Nella tabella seguente sono elencate le interfacce di Extensibility implementabili e le applicazioni che le supportano.

Interfaccia

Descrizione

Applicazioni

Microsoft.Office.Core.IRibbonExtensibility

Implementare questa interfaccia per personalizzare l'interfaccia utente della barra multifunzione.

NotaNota
È possibile aggiungere un elemento Barra multifunzione (XML) in un progetto per generare un'implementazione predefinita Microsoft.Office.Core.IRibbonExtensibility nel componente aggiuntivo.Per ulteriori informazioni, vedere Elemento XML della barra multifunzione.

Excel 2007 ed Excel 2010

InfoPath 2010

Outlook 2007 e Outlook 2010

PowerPoint 2007 e PowerPoint 2010

Project 2010

Visio 2010

Word 2007 e Word 2010

Microsoft.Office.Core.ICustomTaskPaneConsumer

Implementare questa interfaccia per creare un riquadro attività personalizzato.

Excel 2007 ed Excel 2010

Outlook 2007 e Outlook 2010

PowerPoint 2007 e PowerPoint 2010

Word 2007 e Word 2010

Microsoft.Office.Interop.Outlook.FormRegionStartup

Implementare questa interfaccia per creare un'area di modulo Outlook.

Outlook 2007 e Outlook 2010

Esistono diverse altre interfacce di estensibilità definite dalle applicazioni di Microsoft Office, ad esempio Microsoft.Office.Core.IBlogExtensibility, Microsoft.Office.Core.EncryptionProvider e Microsoft.Office.Core.SignatureProvider. In Visual Studio l'implementazione di queste interfacce in un componente aggiuntivo creato tramite i modelli di progetto di Office non è supportata.

Utilizzo delle interfacce di Extensibility

Per personalizzare una funzionalità dell'interfaccia utente utilizzando un'interfaccia di Extensibility, implementare l'interfaccia appropriata nel progetto del componente aggiuntivo. Eseguire quindi l'override del metodo RequestService in modo da ottenere un'istanza della classe che implementa l'interfaccia.

Per un'applicazione di esempio che illustra come implementare le interfacce Microsoft.Office.Core.IRibbonExtensibility, Microsoft.Office.Core.ICustomTaskPaneConsumer e Microsoft.Office.Interop.Outlook.FormRegionStartup in un componente aggiuntivo per Outlook, vedere l'esempio di gestione dell'interfaccia utente in Esempi di sviluppo Office.

Esempio di implementazione di una interfaccia di Extensibility

Nell'esempio di codice riportato di seguito viene illustrata l'implementazione dell'interfaccia Microsoft.Office.Core.ICustomTaskPaneConsumer per creare un riquadro attività personalizzato. Nell'esempio vengono definite due classi.

  • La classe TaskPaneHelper implementa Microsoft.Office.Core.ICustomTaskPaneConsumer per creare e visualizzare un riquadro attività personalizzato.

  • La classe TaskPaneUI fornisce l'interfaccia utente del riquadro attività. Gli attributi della classe TaskPaneUI rendono la classe visibile a COM, permettendo alle applicazioni di Microsoft Office di individuare la classe. In questo esempio, UserControl è un'interfaccia utente vuota, ma è possibile aggiungere i controlli modificando il codice.

    Nota

    Per esporre la classe TaskPaneUI a COM è necessario impostare anche la proprietà Registra per interoperabilità COM per il progetto. Per ulteriori informazioni, vedere Procedura: registrare un componente per l'interoperabilità COM.

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

Per ulteriori informazioni sull'implementazione di Microsoft.Office.Core.ICustomTaskPaneConsumer, vedere Creating Custom Task Panes in the 2007 Office System nella documentazione di Microsoft Office.

Esempio di override del metodo RequestService

Nell'esempio di codice riportato di seguito viene illustrato come eseguire l'override del metodo RequestService per ottenere un'istanza della classe TaskPaneHelper dall'esempio di codice precedente. Viene verificato il valore del parametro serviceGuid per determinare l'interfaccia necessaria e quindi restituire un oggetto che implementi l'interfaccia.

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

Vedere anche

Attività

Procedura: creare progetti di Office in Visual Studio

Concetti

Chiamata di codice nei componenti aggiuntivi a livello di applicazione da altre soluzioni Office

Architettura dei componenti aggiuntivi a livello di applicazione

Altre risorse

Procedure dettagliate ed esempi di sviluppo di applicazioni per Microsoft Office

Programmazione di componenti aggiuntivi a livello di applicazione

Sviluppo di soluzioni Office