Partager via


Procédure pas à pas : affichage de volets de tâches personnalisés avec des messages électroniques dans Outlook

Cette procédure pas à pas explique comment afficher une instance unique d'un volet de tâches personnalisé avec chaque message électronique créé ou ouvert. L'utilisateur peut afficher ou masquer le volet de tâches personnalisé à l'aide d'un bouton situé sur le ruban de chaque message électronique.

S'applique à : Les informations contenues dans cette rubrique s'appliquent aux projets de niveau application pour Outlook 2007 et Outlook 2010. Pour en savoir plus, consultez Fonctionnalités disponibles par type d'application et de projet Office.

Pour afficher un volet de tâches personnalisé avec plusieurs fenêtres Explorateur ou Inspecteur, vous devez créer une instance du volet de tâches personnalisé pour chaque fenêtre ouverte. Pour plus d'informations sur le comportement des volets de tâches personnalisés dans les fenêtres Outlook, consultez Vue d'ensemble des volets de tâches personnalisés.

Notes

Cette procédure pas à pas présente le code du complément en petites sections afin de simplifier la présentation de la logique qui sous-tend ce code. Pour afficher le contenu entier de chaque fichier que vous modifiez selon cette procédure pas à pas, consultez Comment : afficher des volets de tâches personnalisés avec des messages électroniques dans Outlook.

Cette procédure pas à pas décrit les tâches suivantes :

  • Conception de l'interface utilisateur du volet de tâches personnalisé

  • Création d'une interface utilisateur du ruban personnalisée

  • Affichage de l'interface utilisateur du ruban personnalisée avec les messages électroniques

  • Création d'une classe pour gérer les fenêtres Inspecteur et les volets de tâches personnalisés

  • Initialisation et nettoyage des ressources utilisées par le complément

  • Synchronisation du bouton bascule du ruban avec le volet de tâches personnalisé

Notes

Il est possible que pour certains des éléments de l'interface utilisateur de Visual Studio, votre ordinateur affiche des noms ou des emplacements différents de ceux indiqués dans les instructions suivantes. Ces éléments dépendent de l'édition de Visual Studio dont vous disposez et des paramètres que vous utilisez. Pour plus d'informations, consultez Utilisation des paramètres.

Composants requis

Pour exécuter cette procédure pas à pas, vous devez disposer des composants suivants :

-

Une édition de Visual Studio 2010 qui inclut les outils de développement Microsoft Office. Pour plus d'informations, consultez [Configuration d'un ordinateur pour développer des solutions Office](bb398242\(v=vs.100\).md).
  • Microsoft Office Outlook 2007 ou Microsoft Outlook 2010.

lien vers la vidéo Pour une démonstration vidéo connexe, consultez Comment faire pour utiliser des volets de tâches dans Outlook ? (page éventuellement en anglais).

Création du projet

Les volets de tâches personnalisés sont implémentés dans les compléments d'application. Commencez par créer un projet de complément pour Outlook.

Pour créer un projet

  • Créez un projet Complément Outlook portant le nom VoletOfficeÉlémentCourrierOutlook. Utilisez le modèle de projet Complément Outlook. Pour plus d'informations, consultez Comment : créer des projets Office dans Visual Studio.

    Visual Studio ouvre le fichier de code ThisAddIn.cs ou ThisAddIn.vb et ajoute le projet VoletOfficeÉlémentCourrierOutlook à l'Explorateur de solutions.

Conception de l'interface utilisateur du volet de tâches personnalisé

Il n'existe pas de concepteur visuel pour les volets de tâches personnalisés, mais vous pouvez concevoir un contrôle utilisateur en fonction de l'interface utilisateur de votre choix. Le volet de tâches personnalisé de ce complément présente une interface utilisateur simple qui contient un contrôle TextBox. À une étape ultérieure de cette procédure, vous ajouterez le contrôle utilisateur au volet de tâches personnalisé.

Pour concevoir l'interface utilisateur du volet de tâches personnalisé

  1. Dans l'Explorateur de solutions, cliquez sur le projet VoletOfficeÉlémentCourrierOutlook.

  2. Dans le menu Projet, choisissez Ajouter un contrôle utilisateur.

  3. Dans la boîte de dialogue Ajouter un nouvel élément, remplacez le nom du contrôle utilisateur par ContrôleVoletOffice, puis cliquez sur Ajouter.

    Le contrôle utilisateur s'affiche dans le concepteur.

  4. Dans l'onglet Contrôles communs de la boîte à outils, faites glisser un contrôle TextBox vers le contrôle utilisateur.

Conception de l'interface utilisateur du ruban

L'un des objectifs de ce complément est de permettre à l'utilisateur de masquer ou d'afficher le volet de tâches personnalisé sur le ruban de chaque message électronique. Pour fournir l'interface utilisateur, créez une interface utilisateur du ruban personnalisée qui affiche un bouton bascule sur lequel les utilisateurs peuvent cliquer pour afficher ou masquer le volet de tâches personnalisé.

Pour créer une interface utilisateur du ruban personnalisée

  1. Dans le menu Projet, cliquez sur Ajouter un nouvel élément.

  2. Dans la boîte de dialogue Ajouter un nouvel élément, sélectionnez Ruban (Concepteur visuel).

  3. Remplacez le nom du nouveau ruban par ManageTaskPaneRibbon, puis cliquez sur Ajouter.

    Le fichier ManageTaskPaneRibbon.cs ou ManageTaskPaneRibbon.vb s'ouvre dans le Concepteur de ruban et affiche un onglet et un groupe par défaut.

  4. Dans le Concepteur de ruban, cliquez sur group1.

  5. Dans la fenêtre Propriétés, définissez la propriété Label sur la valeur Gestionnaire de volets de tâches.

  6. Dans l'onglet Contrôles de ruban Office de la boîte à outils, faites glisser un contrôle ToggleButton dans le groupe Gestionnaire de volets de tâches.

  7. Cliquez sur toggleButton1.

  8. Dans la fenêtre Propriétés, définissez la propriété Label sur la valeur Afficher le Volet Office.

Afficher l'interface utilisateur du ruban personnalisée avec les messages électroniques

Le volet de tâches personnalisé créé dans cette procédure pas à pas est conçu pour ne s'afficher que dans les fenêtres Inspecteur qui contiennent des messages électroniques. Par conséquent, définissez les propriétés afin d'afficher votre interface utilisateur du ruban personnalisée uniquement avec ces fenêtres.

Pour afficher l'interface utilisateur du ruban personnalisée avec les messages électroniques

  1. Dans le Concepteur de ruban, cliquez sur le ruban ManageTaskPaneRibbon.

  2. Dans la fenêtre Propriétés, cliquez sur la liste déroulante en regard de RibbonType, puis sélectionnez Microsoft.Outlook.Mail.Compose et Microsoft.Outlook.Mail.Read.

Création d'une classe pour gérer les fenêtres Inspecteur et les volets de tâches personnalisés

Il existe plusieurs cas dans lesquels le complément doit identifier le volet de tâches personnalisé associé à un message électronique spécifique. Il s'agit notamment des cas suivants :

  • Lorsque l'utilisateur ferme un message électronique. Dans ce cas, le complément doit supprimer le volet de tâches personnalisé correspondant afin de garantir que les ressources utilisées par le complément sont correctement nettoyées.

  • Lorsque l'utilisateur ferme le volet de tâches personnalisé. Dans ce cas, le complément doit mettre à jour l'état du bouton bascule sur le ruban du message électronique.

  • Lorsque l'utilisateur clique sur le bouton bascule sur le ruban. Dans ce cas, le complément doit masquer ou afficher le volet de tâches correspondant.

Pour permettre au complément d'effectuer le suivi des associations entre un volet de tâches personnalisé et chaque message électronique ouvert, créez une classe personnalisée qui encapsule des paires d'objets Inspector et CustomTaskPane. Cette classe crée un objet de volet de tâches personnalisé pour chaque message électronique et supprime le volet de tâches personnalisé lorsque le message électronique correspondant est fermé.

Pour créer une classe pour gérer les fenêtres Inspecteur et les volets de tâches personnalisés

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le fichier ThisAddIn.cs ou ThisAddIn.vb, puis cliquez sur Afficher le code.

  2. Ajoutez les instructions suivantes au début du fichier.

    Imports System.Collections.Generic
    Imports Microsoft.Office.Tools
    Imports Office = Microsoft.Office.Core
    Imports Outlook = Microsoft.Office.Interop.Outlook
    
    using Microsoft.Office.Tools;
    
  3. Ajoutez le code suivant au fichier ThisAddIn.cs ou ThisAddIn.vb, en dehors de la classe ThisAddIn (pour Visual C#, ajoutez ce code dans l'espace de noms OutlookMailItemTaskPane). La classe InspectorWrapper gère une paire d'objets Inspector et CustomTaskPane. Vous compléterez la définition de cette classe dans les étapes suivantes.

    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. Ajoutez le constructeur suivant après le code ajouté à l'étape précédente. Ce constructeur crée et initialise un nouveau volet de tâches personnalisé associé à l'objet Inspector qui est passé. En C#, le constructeur joint également les gestionnaires d'événements à l'événement Close de l'objet Inspector et à l'événement VisibleChanged de l'objet 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. Ajoutez la méthode suivante après le code ajouté à l'étape précédente. Il s'agit d'un gestionnaire d'événements pour l'événement VisibleChanged de l'objet CustomTaskPane contenu dans la classe InspectorWrapper. Ce code met à jour l'état du bouton bascule à chaque fois que l'utilisateur ouvre ou ferme le volet de tâches personnalisé.

    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. Ajoutez la méthode suivante après le code ajouté à l'étape précédente. Il s'agit d'un gestionnaire d'événements pour l'événement Close de l'objet Inspector qui contient le message électronique actuel. Le gestionnaire d'événements libère des ressources lorsque le message électronique est fermé. Il supprime également le volet de tâches personnalisé actuel de la collection CustomTaskPanes, afin d'éviter la présence de plusieurs instances du volet de tâches personnalisé lorsque le message électronique suivant est ouvert.

    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. Ajoutez le code suivant après le code ajouté à l'étape précédente. À une étape ultérieure de cette procédure, vous appellerez cette propriété à partir d'une méthode dans l'interface utilisateur du ruban personnalisée pour afficher ou masquer le volet de tâches personnalisé.

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

Initialisation et nettoyage des ressources utilisées par le complément

Ajoutez du code à la classe ThisAddIn pour initialiser le complément lorsqu'il est chargé et pour nettoyer les ressources utilisées par le complément lorsqu'il est déchargé. Pour initialiser le complément, vous configurez un gestionnaire d'événements pour l'événement NewInspector et transmettez tous les messages électroniques existants à ce gestionnaire d'événements. Lorsque le complément est déchargé, détachez le gestionnaire d'événements et nettoyez les objets utilisés par le complément.

Pour initialiser et nettoyer les ressources utilisées par le complément

  1. Dans le fichier ThisAddIn.cs ou ThisAddIn.vb, localisez la définition de la classe ThisAddIn.

  2. Ajoutez les déclarations suivantes à la classe ThisAddIn :

    • Le champ inspectorWrappersValue contient tous les objets Inspector et InspectorWrapper gérés par le complément.

    • Le champ inspectors conserve une référence à la collection de fenêtres Inspecteur dans l'instance Outlook actuelle. Cette référence empêche le garbage collector de libérer la mémoire qui contient le gestionnaire d'événements pour l'événement NewInspector, que vous déclarerez à l'étape suivante.

    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. Remplacez la méthode ThisAddIn_Startup par le code suivant. Ce code attache un gestionnaire d'événements à l'événement NewInspector et transmet chaque objet Inspector existant au gestionnaire d'événements. Si l'utilisateur charge le complément alors qu'Outlook est déjà exécuté, le complément utilise cette information pour créer des volets de tâches personnalisés pour tous les messages électroniques déjà ouverts.

    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. Remplacez la méthode ThisAddIn_ShutDown par le code suivant. Ce code détache le gestionnaire d'événements NewInspector et nettoie les objets utilisés par le complément.

    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. Ajoutez le gestionnaire d'événements NewInspector suivant à la classe ThisAddIn. Si un nouvel objet Inspector contient un message électronique, la méthode crée une instance d'un nouvel objet InspectorWrapper pour gérer la relation entre le message électronique et le volet de tâches correspondant.

    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. Ajoutez la propriété suivante à la classe ThisAddIn. Cette propriété expose le champ privé inspectorWrappersValue au coder en dehors de la 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;
        }
    }
    

Point de contrôle

Générez votre projet afin de garantir sa compilation sans erreur.

Pour générer votre projet

  • Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet VoletOfficeÉlémentCourrierOutlook, puis cliquez sur Générer. Assurez-vous que le projet se compile sans erreur.

Synchronisation du bouton bascule du ruban avec le volet de tâches personnalisé

Le bouton bascule est activé (enfoncé) lorsque le volet de tâches est visible et désactivé lorsque le volet de tâches est masqué. Pour synchroniser l'état du bouton avec le volet de tâches personnalisé, modifiez le gestionnaire d'événements Click du bouton bascule.

Pour synchroniser le volet de tâches personnalisé avec le bouton bascule

  1. Dans le Concepteur de ruban, double-cliquez sur le bouton bascule Afficher le Volet de tâches.

    Visual Studio génère automatiquement un gestionnaire d'événements nommé toggleButton1_Click, qui gère l'événement Click du bouton bascule. Visual Studio ouvre également le fichier ManageTaskPaneRibbon.cs ou ManageTaskPaneRibbon.vb dans l'éditeur de code.

  2. Ajoutez les instructions suivantes au début du fichier ManageTaskPaneRibbon.cs ou 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. Remplacez le gestionnaire d'événements toggleButton1_Click par le code suivant. Lorsque l'utilisateur clique sur le bouton bascule, cette méthode masque ou affiche le volet de tâches personnalisé associé à la fenêtre Inspecteur actuelle.

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

Test du projet

Lorsque vous commencez à déboguer le projet, Outlook s'ouvre et le complément est chargé. Le complément affiche une instance unique du volet de tâches personnalisé avec chaque message électronique ouvert. Créez plusieurs messages électroniques pour tester le code.

Pour tester le complément

  1. Appuyez sur F5.

  2. Dans Outlook, cliquez sur Nouveau pour créer un message électronique.

  3. Sur le ruban du message électronique, cliquez sur l'onglet Compléments, puis sur le bouton Afficher le Volet de tâches.

    Vérifiez qu'un volet de tâches portant le titre Mon volet de tâches s'affiche avec le message électronique.

  4. Dans le volet de tâches, tapez Premier volet de tâches dans la zone de texte.

  5. Fermez le volet de tâches.

    Vérifiez le changement d'état du bouton Afficher le Volet de tâches (il n'est plus enfoncé).

  6. Cliquez à nouveau sur le bouton Afficher le Volet de tâches.

    Assurez-vous que le volet de tâches ouvre et que la zone de texte contient encore la chaîne Premier volet de tâches.

  7. Dans Outlook, cliquez sur Nouveau pour créer un deuxième message électronique.

  8. Sur le ruban du message électronique, cliquez sur l'onglet Compléments, puis sur le bouton Afficher le Volet de tâches.

    Vérifiez qu'un volet de tâches portant le titre Mon volet de tâches s'affiche avec le message électronique et que la zone de texte de ce volet de tâches est vide.

  9. Dans le volet de tâches, tapez Deuxième volet de tâches dans la zone de texte.

  10. Modifiez le focus sur le premier message électronique.

    Assurez-vous que le volet de tâches associé à ce message électronique affiche encore Premier volet de tâches dans la zone de texte.

Ce complément gère également des scénarios plus évolués que vous pouvez tester. Par exemple, vous pouvez tester le comportement lors de la consultation de messages électroniques à l'aide des boutons Élément suivant et Élément précédent. Vous pouvez également tester le comportement lorsque vous déchargez le complément, ouvrez plusieurs messages électroniques, puis rechargez le complément.

Étapes suivantes

Pour en savoir plus sur la création de volets de tâches personnalisés, consultez les rubriques ci-dessous :

Voir aussi

Tâches

Comment : ajouter un volet de tâches personnalisé à une application

Procédure pas à pas : automatisation d'une application à partir d'un volet de tâches personnalisé

Procédure pas à pas : synchronisation d'un volet de tâches personnalisé avec un bouton dans le ruban

Comment : afficher des volets de tâches personnalisés avec des messages électroniques dans Outlook

Concepts

Gestion des volets de tâches personnalisés dans plusieurs fenêtres d'application

Accès au ruban au moment de l'exécution

Autres ressources

Vue d'ensemble des volets de tâches personnalisés

Vue d'ensemble du ruban

Vue d'ensemble du modèle d'objet Outlook