Condividi tramite


Procedura dettagliata: visualizzazione dei riquadri attività personalizzati con messaggi di posta elettronica in Outlook

In questa procedura dettagliata viene spiegato come visualizzare un'istanza univoca di un riquadro attività personalizzato con ogni messaggio di posta elettronica creato o aperto. Gli utenti possono visualizzare o nascondere il riquadro attività personalizzato utilizzando un pulsante sulla barra multifunzione di ogni messaggio di posta elettronica.

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

Per visualizzare un riquadro attività personalizzato con più finestre degli elenchi di cartelle o dei controlli, è necessario creare un'istanza del riquadro attività personalizzato per ogni finestra che viene aperta. Per ulteriori informazioni sul comportamento dei riquadri attività personalizzati nelle finestre di Outlook, vedere Cenni preliminari sui riquadri attività personalizzati.

Nota

In questa procedura dettagliata viene spiegato il codice del componente aggiuntivo in piccole sezioni per rendere più facile la discussione della logica associata al codice. Per visualizzare l'intero contenuto di ogni file che si modifica in questa procedura dettagliata, vedere Procedura: visualizzare i riquadri attività personalizzati con messaggi di posta elettronica in Outlook.

In questa procedura dettagliata vengono illustrate le attività seguenti:

  • Progettazione dell'interfaccia utente (UI) del riquadro attività personalizzato.

  • Creazione di un'interfaccia utente della barra multifunzione personalizzata.

  • Visualizzazione dell'interfaccia utente della barra multifunzione personalizzata con i messaggi di posta elettronica.

  • Creazione di una classe per gestire le finestre di controllo e i riquadri attività personalizzati.

  • Inizializzazione e pulizia delle risorse utilizzate dal componente aggiuntivo.

  • Sincronizzazione dell'interruttore della barra multifunzione con il riquadro attività personalizzato.

Nota

Il computer potrebbe mostrare nomi o percorsi diversi per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti. L'edizione di Visual Studio in uso e le impostazioni utilizzate determinano questi elementi. Per ulteriori informazioni, vedere Gestione delle impostazioni.

Prerequisiti

Per completare la procedura dettagliata, è necessario disporre dei componenti seguenti:

-

Una versione di Visual Studio 2010 che include gli strumenti per sviluppatori di Microsoft Office. Per ulteriori informazioni, vedere [Configurazione di un computer per sviluppare soluzioni Office](bb398242\(v=vs.100\).md).
  • Microsoft Office Outlook 2007 o Microsoft Outlook 2010.

Collegamento a video Per una dimostrazione video correlata, vedere Ricerca per categorie: Utilizzo dei riquadri attività in Outlook.

Creazione del progetto

I riquadri attività personalizzati sono implementati nei componenti aggiuntivi a livello di applicazione. Creare innanzitutto un progetto componente aggiuntivo per Outlook.

Per creare un nuovo progetto

  • Creare un progetto Componente aggiuntivo per Outlook con il nome OutlookMailItemTaskPane. Utilizzare il modello di progetto Componente aggiuntivo per Outlook. Per ulteriori informazioni, vedere Procedura: creare progetti di Office in Visual Studio.

    In Visual Studio verrà aperto il file di codice ThisAddIn.cs o ThisAddIn.vb e il progetto OutlookMailItemTaskPane verrà aggiunto in Esplora soluzioni.

Progettazione dell'interfaccia utente del riquadro attività personalizzato

Non è disponibile alcuna finestra di progettazione visiva per i riquadri attività personalizzati, ma è possibile progettare un controllo utente con l'interfaccia utente desiderata. Il riquadro attività personalizzato in questo componente aggiuntivo ha un'interfaccia utente semplice contenente un controllo TextBox. Più avanti nella procedura dettagliata tale controllo utente verrà aggiunto al riquadro attività personalizzato.

Per progettare l'interfaccia utente del riquadro attività personalizzato

  1. Fare clic sul progetto OutlookMailItemTaskPane in Esplora soluzioni.

  2. Scegliere Aggiungi controllo utente dal menu Progetto.

  3. Nella finestra di dialogo Aggiungi nuovo elemento modificare il nome del controllo utente in TaskPaneControl e scegliere Aggiungi.

    Il controllo utente verrà visualizzato nella finestra di progettazione.

  4. Trascinare un controllo TextBox nel controllo utente dalla scheda Controlli comuni della Casella degli strumenti.

Progettazione dell'interfaccia utente della barra multifunzione

Uno degli obiettivi di questo componente aggiuntivo consiste nell'offrire agli utenti un modo per nascondere o visualizzare il riquadro attività personalizzato dalla barra multifunzione di ogni messaggio di posta elettronica. Per fornire l'interfaccia utente, creare un'interfaccia utente della barra multifunzione personalizzata che visualizzi un interruttore che gli utenti possono selezionare per visualizzare o nascondere il riquadro attività personalizzato.

Per creare un'interfaccia utente della barra multifunzione personalizzata

  1. Scegliere Aggiungi nuovo elemento dal menu Progetto.

  2. Nella finestra di dialogo Aggiungi nuovo elemento selezionare Barra multifunzione (finestra di progettazione visiva).

  3. Modificare il nome della nuova barra multifunzione in ManageTaskPaneRibbon, quindi fare clic su Aggiungi.

    Viene visualizzato il file ManageTaskPaneRibbon.cs o ManageTaskPaneRibbon.vb nella finestra di progettazione della barra multifunzione con una scheda e un gruppo predefiniti.

  4. Fare clic su group1 nella finestra di progettazione della barra multifunzione.

  5. Nella finestra Proprietà impostare la proprietà Label su Gestione riquadro attività.

  6. Dalla scheda Controlli barra multifunzione di Office di Casella degli strumenti, trascinare un controllo ToggleButton sul gruppo Gestione riquadro attività.

  7. Fare clic su toggleButton1.

  8. Nella finestra Proprietà impostare la proprietà Label su Mostra riquadro attività.

Visualizzare l'interfaccia utente della barra multifunzione personalizzata con i messaggi di posta elettronica

Il riquadro attività personalizzato che si crea in questa procedura dettagliata è progettato per essere visualizzato solo nelle finestre di controllo che contengono messaggi di posta elettronica. Di conseguenza, impostare le proprietà per visualizzare l'interfaccia utente della barra multifunzione personalizzata solo con queste finestre.

Per visualizzare l'interfaccia utente della barra multifunzione personalizzata con i messaggi di posta elettronica

  1. Nella finestra di progettazione della barra multifunzione, fare clic sulla barra multifunzione ManageTaskPaneRibbon.

  2. Nella finestra Proprietà, fare clic sull'elenco a discesa accanto a RibbonType e selezionare Microsoft.Outlook.Mail.Compose e Microsoft.Outlook.Mail.Read.

Creazione di una classe per gestire le finestre di controllo e i riquadri attività personalizzati

In diversi casi, il componente aggiuntivo deve identificare quale riquadro attività personalizzato è associato a un messaggio di posta elettronica specifico. Tali casi includono:

  • Quando l'utente chiude un messaggio di posta elettronica. In questo caso, il componente aggiuntivo deve rimuovere il riquadro attività personalizzato corrispondente per assicurare che le risorse utilizzate dal componente aggiuntivo siano pulite correttamente.

  • Quando l'utente chiude il riquadro attività personalizzato. In questo caso, il componente aggiuntivo deve aggiornare lo stato dell'interruttore sulla barra multifunzione del messaggio di posta elettronica.

  • Quando l'utente fa clic sull'interruttore della barra multifunzione. In questo caso, il componente aggiuntivo deve nascondere o visualizzare il riquadro attività corrispondente.

Per consentire al componente aggiuntivo di tenere traccia del riquadro attività personalizzato associato a ogni messaggio di posta elettronica aperto, creare una classe personalizzata che esegue il wrapping di coppie di oggetti Inspector e CustomTaskPane. Questa classe crea un nuovo oggetto riquadro attività personalizzato per ogni messaggio di posta elettronica ed elimina il riquadro attività personalizzato quando il messaggio di posta elettronica corrispondente viene chiuso.

Per creare una classe per gestire le finestre di controllo e i riquadri attività personalizzati

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul file ThisAddIn.cs o ThisAddIn.vb, quindi scegliere Visualizza codice.

  2. Aggiungere le seguenti istruzioni all'inizio del file.

    Imports System.Collections.Generic
    Imports Microsoft.Office.Tools
    Imports Office = Microsoft.Office.Core
    Imports Outlook = Microsoft.Office.Interop.Outlook
    
    using Microsoft.Office.Tools;
    
  3. Aggiungere il codice seguente al file ThisAddIn.cs o ThisAddIn.vb, fuori della classe ThisAddIn (per Visual C#, aggiungere questo codice nello spazio dei nomi OutlookMailItemTaskPane). La classe InspectorWrapper gestisce una coppia di oggetti Inspector e CustomTaskPane. La definizione di questa classe verrà completata nei passaggi seguenti.

    Public Class InspectorWrapper
        Private inspector As Outlook.Inspector
        Private WithEvents inspectorEvents As Outlook.InspectorEvents_Event
        Private WithEvents taskPane As CustomTaskPane
    
    public class InspectorWrapper
    {
        private Outlook.Inspector inspector;
        private CustomTaskPane taskPane;
    
  4. Aggiungere il costruttore riportato di seguito dopo il codice aggiunto al passaggio precedente. Questo costruttore consente di creare e inizializzare un nuovo riquadro attività personalizzato associato all'oggetto Inspector passato. In C# il costruttore consente anche di associare i gestori all'evento Close dell'oggetto Inspector e all'evento VisibleChanged dell'oggetto CustomTaskPane.

    Public Sub New(ByVal Inspector As Outlook.Inspector)
        Me.inspector = Inspector
        inspectorEvents = TryCast(Me.inspector, Outlook.InspectorEvents_Event)
        taskPane = Globals.ThisAddIn.CustomTaskPanes.Add(New TaskPaneControl(), _
            "My task pane", Inspector)
    End Sub
    
    public InspectorWrapper(Outlook.Inspector Inspector)
    {
        inspector = Inspector;
        ((Outlook.InspectorEvents_Event)inspector).Close +=
            new Outlook.InspectorEvents_CloseEventHandler(InspectorWrapper_Close);
    
        taskPane = Globals.ThisAddIn.CustomTaskPanes.Add(
            new TaskPaneControl(), "My task pane", inspector);
        taskPane.VisibleChanged += new EventHandler(TaskPane_VisibleChanged);
    }
    
  5. Aggiungere il metodo riportato di seguito dopo il codice aggiunto al passaggio precedente. Questo metodo è un gestore eventi per l'evento VisibleChanged dell'oggetto CustomTaskPane contenuto nella classe InspectorWrapper. Questo codice aggiorna lo stato dell'interruttore quando l'utente apre o chiude il riquadro attività personalizzato.

    Private Sub TaskPane_VisibleChanged(ByVal sender As Object, ByVal e As EventArgs) _
        Handles taskPane.VisibleChanged
        Globals.Ribbons(inspector).ManageTaskPaneRibbon.ToggleButton1.Checked = taskPane.Visible
    End Sub
    
    void TaskPane_VisibleChanged(object sender, EventArgs e)
    {
        Globals.Ribbons[inspector].ManageTaskPaneRibbon.toggleButton1.Checked = 
            taskPane.Visible;
    }
    
  6. Aggiungere il metodo riportato di seguito dopo il codice aggiunto al passaggio precedente. Questo metodo è un gestore eventi per l'evento Close dell'oggetto Inspector che contiene il messaggio di posta elettronica corrente. Il gestore eventi libera le risorse quando il messaggio di posta elettronica viene chiuso. Il gestore eventi inoltre rimuove il riquadro attività personalizzato corrente dall'insieme CustomTaskPanes. In tal modo si evitano più istanze del riquadro attività personalizzato quando il successivo messaggio di posta elettronica viene aperto.

    Sub InspectorWrapper_Close() Handles inspectorEvents.Close
        If Not (taskPane Is Nothing) Then
            Globals.ThisAddIn.CustomTaskPanes.Remove(taskPane)
        End If
    
        taskPane = Nothing
        Globals.ThisAddIn.InspectorWrappers.Remove(inspector)
        RemoveHandler inspectorEvents.Close, AddressOf InspectorWrapper_Close
        inspector = Nothing
    End Sub
    
    void InspectorWrapper_Close()
    {
        if (taskPane != null)
        {
            Globals.ThisAddIn.CustomTaskPanes.Remove(taskPane);
        }
    
        taskPane = null;
        Globals.ThisAddIn.InspectorWrappers.Remove(inspector);
        ((Outlook.InspectorEvents_Event)inspector).Close -=
            new Outlook.InspectorEvents_CloseEventHandler(InspectorWrapper_Close);
        inspector = null;
    }
    
  7. Aggiungere il codice riportato di seguito dopo il codice aggiunto al passaggio precedente. Più avanti in questa procedura, questa proprietà verrà chiamata da un metodo nell'interfaccia utente della barra multifunzione personalizzata per visualizzare o nascondere il riquadro attività personalizzato.

        Public ReadOnly Property CustomTaskPane() As CustomTaskPane
            Get
                Return taskPane
            End Get
        End Property
    End Class
    
        public CustomTaskPane CustomTaskPane
        {
            get
            {
                return taskPane;
            }
        }
    }
    

Inizializzazione e pulizia delle risorse utilizzate dal componente aggiuntivo

Aggiungere il codice alla classe ThisAddIn per inizializzare il componente aggiuntivo quando viene caricato e pulire le risorse utilizzate dal componente aggiuntivo quando viene scaricato. Il componente aggiuntivo viene inizializzato configurando un gestore eventi per l'evento NewInspector e passando tutti i messaggi di posta elettronica esistenti a questo gestore eventi. Quando il componente aggiuntivo viene scaricato, il gestore eventi viene disconnesso e gli oggetti utilizzati dal componente aggiuntivo vengono puliti.

Per inizializzare e pulire le risorse utilizzate dal componente aggiuntivo

  1. Nel file ThisAddIn.cs o ThisAddIn.vb, trovare la definizione della classe ThisAddIn.

  2. Aggiungere le seguenti dichiarazioni alla classe ThisAddIn:

    • Il campo inspectorWrappersValue contiene tutti gli oggetti Inspector e InspectorWrapper gestiti dal componente aggiuntivo.

    • Il campo inspectors gestisce un riferimento all'insieme di finestre di controllo nell'istanza Outlook corrente. Questo riferimento impedisce al Garbage Collector di liberare la memoria che contiene il gestore eventi per l'evento NewInspector che verrà dichiarato nel prossimo passaggio.

    Private inspectorWrappersValue As New Dictionary(Of Outlook.Inspector, InspectorWrapper)
    Private WithEvents inspectors As Outlook.Inspectors
    
    private Dictionary<Outlook.Inspector, InspectorWrapper> inspectorWrappersValue =
        new Dictionary<Outlook.Inspector, InspectorWrapper>();
    private Outlook.Inspectors inspectors;
    
  3. Sostituire il metodo ThisAddIn_Startup con il codice seguente. Il codice collega un gestore eventi all'evento NewInspector e passa ogni oggetto Inspector esistente al gestore eventi. Se l'utente carica il componente aggiuntivo con Outlook in esecuzione, il componente aggiuntivo utilizza queste informazioni per creare riquadri attività personalizzati per tutti i messaggi di posta elettronica già aperti.

    Private Sub ThisAddIn_Startup(ByVal sender As Object, ByVal e As System.EventArgs) _
        Handles Me.Startup
    
        inspectors = Me.Application.Inspectors
        Dim inspector As Outlook.Inspector
        For Each inspector In inspectors
            Inspectors_NewInspector(inspector)
        Next inspector
    End Sub
    
    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        inspectors = this.Application.Inspectors;
        inspectors.NewInspector +=
            new Outlook.InspectorsEvents_NewInspectorEventHandler(
            Inspectors_NewInspector);
    
        foreach (Outlook.Inspector inspector in inspectors)
        {
            Inspectors_NewInspector(inspector);
        }
    }
    
  4. Sostituire il metodo ThisAddIn_ShutDown con il codice seguente. Questo codice disconnette il gestore eventi NewInspector e pulisce gli oggetti utilizzati dal componente aggiuntivo.

    Private Sub ThisAddIn_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) _
        Handles Me.Shutdown
    
        RemoveHandler inspectors.NewInspector, AddressOf Inspectors_NewInspector
        inspectors = Nothing
        inspectorWrappersValue = Nothing
    End Sub
    
    private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
    {
        inspectors.NewInspector -=
            new Outlook.InspectorsEvents_NewInspectorEventHandler(
            Inspectors_NewInspector);
        inspectors = null;
        inspectorWrappersValue = null;
    }
    
  5. Aggiungere il seguente gestore eventi NewInspector alla classe ThisAddIn. Quando un nuovo Inspector contiene un messaggio di posta elettronica, il metodo crea l'istanza di un nuovo oggetto InspectorWrapper per gestire la relazione tra il messaggio di posta elettronica e il riquadro attività corrispondente.

    Sub Inspectors_NewInspector(ByVal Inspector As Outlook.Inspector) _
        Handles inspectors.NewInspector
    
        If TypeOf Inspector.CurrentItem Is Outlook.MailItem Then
            inspectorWrappersValue.Add(Inspector, New InspectorWrapper(Inspector))
        End If
    End Sub
    
    void Inspectors_NewInspector(Outlook.Inspector Inspector)
    {
        if (Inspector.CurrentItem is Outlook.MailItem)
        {
            inspectorWrappersValue.Add(Inspector, new InspectorWrapper(Inspector));
        }
    }
    
  6. Aggiungere la seguente proprietà alla classe ThisAddIn. Questa proprietà espone il campo inspectorWrappersValue privato al codice fuori dalla classe ThisAddIn.

    Public ReadOnly Property InspectorWrappers() As Dictionary(Of Outlook.Inspector, InspectorWrapper)
        Get
            Return inspectorWrappersValue
        End Get
    End Property
    
    public Dictionary<Outlook.Inspector, InspectorWrapper> InspectorWrappers
    {
        get
        {
            return inspectorWrappersValue;
        }
    }
    

Verifica

Compilare il progetto per verificare che l'operazione venga completata senza errori.

Per compilare il progetto

  • Fare clic con il pulsante destro del mouse sul progetto OutlookMailItemTaskPane in Esplora soluzioni, quindi scegliere Compila. Verificare che il progetto venga compilato senza errori.

Sincronizzazione dell'interruttore della barra multifunzione con il riquadro attività personalizzato

L'interruttore risulterà premuto quando il riquadro attività è visibile e non premuto quando il riquadro attività è nascosto. Per sincronizzare lo stato del pulsante con il riquadro attività personalizzato, modificare il gestore eventi Click dell'interruttore.

Per sincronizzare l'interruttore con il riquadro attività personalizzato

  1. Nella finestra di progettazione della barra multifunzione, fare doppio clic sull'interruttore Mostra riquadro attività.

    In Visual Studio viene automaticamente generato un gestore eventi denominato toggleButton1_Click che gestisce l'evento Click dell'interruttore. In Visual Studio viene anche aperto il file ManageTaskPaneRibbon.cs o ManageTaskPaneRibbon.vb nell'editor del codice.

  2. Aggiungere l'istruzione seguente all'inizio del file ManageTaskPaneRibbon.cs o ManageTaskPaneRibbon.vb.

    Imports Microsoft.Office.Tools.Ribbon
    Imports Outlook = Microsoft.Office.Interop.Outlook
    Imports Microsoft.Office.Tools
    
    using Outlook = Microsoft.Office.Interop.Outlook;
    using Microsoft.Office.Tools;
    
  3. Sostituire il gestore eventi toggleButton1_Click con il codice riportato di seguito. Quando l'utente fa clic sull'interruttore, il metodo visualizza o nasconde il riquadro attività personalizzato associato alla finestra del controllo corrente.

    Private Sub ToggleButton1_Click(ByVal sender As System.Object, _
        ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _
        Handles ToggleButton1.Click
    
        Dim inspector As Outlook.Inspector = e.Control.Context
        Dim inspectorWrapper As InspectorWrapper = Globals.ThisAddIn.InspectorWrappers(inspector)
        Dim taskPane As CustomTaskPane = inspectorWrapper.CustomTaskPane
        If Not (taskPane Is Nothing) Then
            taskPane.Visible = TryCast(sender, RibbonToggleButton).Checked
        End If
    End Sub
    
    private void toggleButton1_Click(object sender, RibbonControlEventArgs e)
    {
        Outlook.Inspector inspector = (Outlook.Inspector)e.Control.Context;
        InspectorWrapper inspectorWrapper = Globals.ThisAddIn.InspectorWrappers[inspector];
        CustomTaskPane taskPane = inspectorWrapper.CustomTaskPane;
        if (taskPane != null)
        {
            taskPane.Visible = ((RibbonToggleButton)sender).Checked;
        }
    }
    

Verifica del progetto

Quando si inizia il debug del progetto, Outlook viene aperto e il componente aggiuntivo viene caricato. Il componente aggiuntivo visualizza un'istanza univoca del riquadro attività personalizzato con ogni messaggio di posta elettronica aperto. Creare molti messaggi di posta elettronica nuovi per verificare il codice.

Per verificare il componente aggiuntivo

  1. Premere F5.

  2. In Outlook, fare clic su Nuovo per creare un nuovo messaggio di posta elettronica.

  3. Nella barra multifunzione del messaggio di posta elettronica, selezionare la scheda Componenti aggiuntivi e fare clic sul pulsante Mostra riquadro attività.

    Verificare che un riquadro attività con il titolo My task pane sia visualizzato con il messaggio di posta elettronica.

  4. Nel riquadro attività, digitare First task pane nella casella di testo.

  5. Chiudere il riquadro attività.

    Verificare che lo stato del pulsante Mostra riquadro attività cambi in modo da non risultare premuto.

  6. Fare clic nuovamente sul pulsante Mostra riquadro attività.

    Verificare che il riquadro attività si apra e che la casella di testo contenga ancora la stringa First task pane.

  7. In Outlook, fare clic su Nuovo per creare un secondo messaggio di posta elettronica.

  8. Nella barra multifunzione del messaggio di posta elettronica, selezionare la scheda Componenti aggiuntivi e fare clic sul pulsante Mostra riquadro attività.

    Verificare che un riquadro attività con il titolo My task pane sia visualizzato con il messaggio di posta elettronica e che la casella di testo nel riquadro attività sia vuota.

  9. Nel riquadro attività, digitare Second task pane nella casella di testo.

  10. Impostare lo stato attivo sul primo messaggio di posta elettronica.

    Verificare che il riquadro attività associato al messaggio di posta elettronica visualizzi ancora First task pane nella casella di testo.

Questo componente aggiuntivo gestisce inoltre scenari più avanzati che si possono provare. Ad esempio, è possibile verificare il comportamento quando si visualizzano i messaggi di posta elettronica utilizzando i pulsanti Elemento successivo ed Elemento precedente. È anche possibile verificare il comportamento quando si scarica il componente aggiuntivo, si aprono molti messaggi di posta elettronica e quindi si ricarica il componente aggiuntivo.

Passaggi successivi

Per ulteriori informazioni sulla creazione di riquadri attività personalizzati vedere i seguenti argomenti:

Vedere anche

Attività

Procedura: aggiungere un riquadro attività personalizzato a un'applicazione

Procedura dettagliata: automazione di un'applicazione da un riquadro attività personalizzato

Procedura dettagliata: sincronizzazione di un riquadro attività personalizzato con una barra multifunzione

Procedura: visualizzare i riquadri attività personalizzati con messaggi di posta elettronica in Outlook

Concetti

Gestione dei riquadri attività personalizzati in più finestre dell'applicazione

Accesso alla barra multifunzione in fase di esecuzione

Altre risorse

Cenni preliminari sui riquadri attività personalizzati

Cenni preliminari sulla barra multifunzione

Cenni preliminari sul modello a oggetti di Outlook