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.
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é
Dans l'Explorateur de solutions, cliquez sur le projet VoletOfficeÉlémentCourrierOutlook.
Dans le menu Projet, choisissez Ajouter un contrôle utilisateur.
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.
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
Dans le menu Projet, cliquez sur Ajouter un nouvel élément.
Dans la boîte de dialogue Ajouter un nouvel élément, sélectionnez Ruban (Concepteur visuel).
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.
Dans le Concepteur de ruban, cliquez sur group1.
Dans la fenêtre Propriétés, définissez la propriété Label sur la valeur Gestionnaire de volets de tâches.
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.
Cliquez sur toggleButton1.
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
Dans le Concepteur de ruban, cliquez sur le ruban ManageTaskPaneRibbon.
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
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le fichier ThisAddIn.cs ou ThisAddIn.vb, puis cliquez sur Afficher le code.
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;
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;
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); }
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; }
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; }
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
Dans le fichier ThisAddIn.cs ou ThisAddIn.vb, localisez la définition de la classe ThisAddIn.
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;
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); } }
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; }
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)); } }
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
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.
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;
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
Appuyez sur F5.
Dans Outlook, cliquez sur Nouveau pour créer un message électronique.
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.
Dans le volet de tâches, tapez Premier volet de tâches dans la zone de texte.
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é).
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.
Dans Outlook, cliquez sur Nouveau pour créer un deuxième message électronique.
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.
Dans le volet de tâches, tapez Deuxième volet de tâches dans la zone de texte.
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 :
Créer un volet de tâches personnalisé dans un complément pour une autre application. Pour plus d'informations sur les applications prenant en charge les volets de tâches personnalisés, consultez Vue d'ensemble des volets de tâches personnalisés.
Automatiser une application Microsoft Office à l'aide d'un volet de tâches personnalisé. Pour plus d'informations, consultez Procédure pas à pas : automatisation d'une application à partir d'un volet de tâches personnalisé.
Créer un bouton du ruban dans Excel pour masquer ou afficher un volet de tâches personnalisé. Pour plus d'informations, consultez Procédure pas à pas : synchronisation d'un volet de tâches personnalisé avec un bouton dans le ruban.
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