Procédure pas à pas : création de menus contextuels pour les signets
Cette procédure pas à pas montre comment créer des menus contextuels pour les contrôles Bookmark dans une personnalisation au niveau du document pour Word. Lorsqu'un utilisateur clique avec le bouton droit sur le texte d'un signet, un menu contextuel proposant des options de mise en forme apparaît.
S'applique à : Les informations contenues dans cette rubrique s'appliquent aux projets de niveau document pour Word 2007 et Word 2010. Pour en savoir plus, consultez Fonctionnalités disponibles par type d'application et de projet Office.
Cette procédure pas à pas décrit les tâches suivantes :
Ajout de texte et de signets au document dans un projet au niveau du document au moment du design
Création d'un menu contextuel
Vérification de la présence de signets superposés
Notes
Il est possible que votre ordinateur affiche des noms ou des emplacements différents pour certains des éléments d'interface utilisateur de Visual Studio dans les instructions suivantes. L'édition de Visual Studio dont vous disposez et les paramètres que vous utilisez déterminent ces éléments. Pour plus d'informations, consultez Paramètres Visual Studio.
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 Word 2007 ou Word 2010.
Création du projet
La première étape consiste à créer un projet de document Word dans Visual Studio.
Pour créer un projet
Créez un projet de document Word portant le nom My Bookmark Shortcut Menu. Dans l'Assistant, sélectionnez Créer un nouveau document. Pour plus d'informations, consultez Comment : créer des projets Office dans Visual Studio.
Visual Studio ouvre le nouveau document Word dans le concepteur et ajoute le projet My Bookmark Shortcut Menu à l'Explorateur de solutions.
Ajout de texte et de signets au document
Ajoutez du texte à votre document puis ajoutez deux signets superposés.
Pour ajouter du texte à votre document
Tapez le texte suivant.
Il s'agit d'un exemple de création d'un menu contextuel lorsque vous cliquez avec le bouton droit sur le texte dans un signet.
Pour ajouter un contrôle Bookmark à votre document
À partir de l'onglet Contrôles Word de la Boîte à outils, faites glisser un contrôle Bookmark vers votre document.
La boîte de dialogue Ajouter un contrôle Bookmark s'affiche.
Sélectionnez les mots création d'un menu contextuel lorsque vous cliquez avec le bouton droit sur le texte puis cliquez sur OK.
bookmark1 est ajouté au document.
Ajoutez un autre contrôle Bookmark aux mots cliquez avec le bouton droit sur le texte dans un signet.
bookmark2 est ajouté au document.
Notes
Les mots cliquez avec le bouton droit sur le texte apparaissent dans bookmark1 et bookmark2.
Lorsque vous ajoutez un signet à un document au moment du design, un contrôle Bookmark est créé. Vous pouvez programmer plusieurs événements du signet. Ainsi, il est possible d'écrire du code dans l'événement BeforeRightClick du signet de manière à faire apparaître un menu contextuel lorsque l'utilisateur clique avec le bouton droit sur le texte du signet.
Création du menu contextuel
Pour créer le menu contextuel
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur ThisDocument, puis cliquez sur Afficher le code.
Déclarez les variables CommandBar et une variable de signet au niveau de la classe.
Private commandBar As Office.CommandBar Private selectedBookmark As Microsoft.Office.Tools.Word.Bookmark WithEvents boldText As Office.CommandBarButton WithEvents ItalicText As Office.CommandBarButton
private Office.CommandBar commandBar; private Office.CommandBarButton boldText; private Office.CommandBarButton italicText; private Microsoft.Office.Tools.Word.Bookmark selectedBookmark; const int WordTrue = -1; const int WordFalse = 0;
Ajoutez une méthode pour créer le menu.
Private Sub AddPopUp() commandBar = Application.CommandBars.Add( _ "FormatText", Office.MsoBarPosition.msoBarPopup, , True) ' Add a button and set the style, caption, icon and tag. boldText = CType(commandBar.Controls.Add(1), Office.CommandBarButton) With boldText .Style = Office.MsoButtonStyle.msoButtonIconAndCaption .Caption = "Bold" .FaceId = 113 .Tag = "0" End With ' Add a button and set the style, caption, icon and tag. ItalicText = CType(commandBar.Controls.Add(1), Office.CommandBarButton) With ItalicText .Style = Office.MsoButtonStyle.msoButtonIconAndCaption .Caption = "Italic" .FaceId = 114 .Tag = "1" End With CType(Me.AttachedTemplate, Microsoft.Office.Interop.Word.Template).Saved = True End Sub
private void AddPopUp() { commandBar = Application.CommandBars.Add("FormatText", Office.MsoBarPosition.msoBarPopup, missing, true); // Add a button and set the style, caption, icon and tag. boldText = (Office.CommandBarButton)commandBar.Controls.Add( 1, missing, missing, missing, missing); boldText.Style = Office.MsoButtonStyle.msoButtonCaption; boldText.Caption = "Bold"; boldText.FaceId = 113; boldText.Tag = "0"; // Add a button and set the style, caption, icon and tag. italicText = (Office.CommandBarButton)commandBar.Controls.Add( 1, missing, missing, missing, missing); italicText.Style = Office.MsoButtonStyle.msoButtonCaption; italicText.Caption = "Italic"; italicText.FaceId = 114; italicText.Tag = "1"; // Handle the click events with the ButtonClick procedure. boldText.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(ButtonClick); italicText.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(ButtonClick); ((Microsoft.Office.Interop.Word.Template)this.AttachedTemplate).Saved = true; }
Appelez AddPopup à partir de l'événement Startup de ThisDocument.
Private Sub ThisDocument_Startup(ByVal sender As Object, ByVal e As _ System.EventArgs) Handles Me.Startup AddPopUp() End Sub
private void ThisDocument_Startup(object sender, System.EventArgs e) { AddPopUp(); }
Pour mettre en forme le texte dans le signet
Ajoutez un gestionnaire d'événements ButtonClick pour appliquer la mise en forme au signet.
Private Sub ButtonClick(ByVal ctrl As Office.CommandBarButton, _ ByRef Cancel As Boolean) Handles boldText.Click, ItalicText.Click Select Case ctrl.Caption Case "Bold" selectedBookmark.Bold = Not selectedBookmark.Bold Case "Italic" selectedBookmark.Italic = Not selectedBookmark.Italic End Select Me.ActiveWindow.SetFocus() End Sub
private void ButtonClick(Microsoft.Office.Core.CommandBarButton Ctrl, ref bool CancelDefault) { if (Ctrl.Caption == "Bold") { if (selectedBookmark.Bold == WordTrue) { selectedBookmark.Bold = WordFalse; } else { selectedBookmark.Bold = WordTrue; } } else if (Ctrl.Caption == "Italic") { if (selectedBookmark.Italic == WordTrue) { selectedBookmark.Italic = WordFalse; } else { selectedBookmark.Italic = WordTrue; } } }
Ajoutez un gestionnaire d'événements showPopupMenu pour gérer l'événement BeforeRightClick des deux signets.
Notes
Vous devez écrire du code pour gérer la superposition éventuelle des signets. Si vous ne le faites pas, par défaut, le code sera appelé pour tous les signets de la sélection.
Private Sub showPopupMenu(ByVal sender As Object, ByVal e _ As Microsoft.Office.Tools.Word.ClickEventArgs) _ Handles Bookmark1.BeforeRightClick, Bookmark2.BeforeRightClick Dim startPosition As Integer = 0 Dim i As Integer ' If bookmarks overlap, get bookmark closest to cursor. For i = 1 To e.Selection.Bookmarks.Count If e.Selection.Bookmarks(i).Start > startPosition Then startPosition = e.Selection.Bookmarks(i).Start End If Next ' If closest bookmark is the sender, show the popup. If DirectCast(sender, Microsoft.Office.Tools.Word.Bookmark).Start = _ startPosition Then selectedBookmark = DirectCast(sender, Microsoft.Office.Tools.Word.Bookmark) commandBar.ShowPopup() e.Cancel = True End If End Sub
private void ShowPopupMenu(object sender, Microsoft.Office.Tools.Word.ClickEventArgs e) { int startPosition = 0; // If bookmarks overlap, get bookmark closest to cursor. for (int i = 1; i <= e.Selection.Bookmarks.Count; i++) { if (e.Selection.Bookmarks[i].Start > startPosition) { startPosition = e.Selection.Bookmarks[i].Start; } } // If closest bookmark is the sender, show the popup. if (((Microsoft.Office.Tools.Word.Bookmark)sender).Start == startPosition) { selectedBookmark = (Microsoft.Office.Tools.Word.Bookmark)sender; commandBar.ShowPopup(missing, missing); e.Cancel = true; } }
En C#, vous devez ajouter des gestionnaires d'événements pour les contrôles Bookmark à l'événement Startup. Pour plus d'informations sur la création de gestionnaires d'événements, consultez Comment : créer des gestionnaires d'événements dans les projets Office.
this.bookmark1.BeforeRightClick += new Microsoft.Office.Tools.Word.ClickEventHandler(ShowPopupMenu); this.bookmark2.BeforeRightClick += new Microsoft.Office.Tools.Word.ClickEventHandler(ShowPopupMenu);
Test de l'application
Testez votre document pour vérifier que les éléments de menu Gras et Italique apparaissent dans le menu contextuel lorsque vous cliquez avec le bouton droit sur le texte d'un signet et que le texte est mis en forme correctement.
Pour tester votre document
Appuyez sur F5 pour exécuter votre projet.
Cliquez avec le bouton droit dans le premier signet, puis cliquez sur Gras.
Vérifiez que la mise en forme de l'ensemble du texte dans bookmark1 est en gras.
Cliquez avec le bouton droit sur le texte, à l'endroit où les signets se chevauchent, puis cliquez sur Italique.
Vérifiez que sont en italique tout le texte de bookmark2 et seulement la partie du texte de bookmark1 qui recoupe bookmark2.
Étapes suivantes
Vous devrez peut-être ensuite :
Écrire du code pour répondre aux événements de contrôles hôtes dans Excel. Pour plus d'informations, consultez Procédure pas à pas : programmation d'événements d'un contrôle NamedRange.
Utiliser une case à cocher pour modifier la mise en forme d'un signet. Pour plus d'informations, consultez Procédure pas à pas : modification de la mise en forme d'un document à l'aide de contrôles CheckBox.
Voir aussi
Concepts
Procédures pas à pas utilisant Word
Automatisation de Word à l'aide d'objets étendus
Paramètres optionnels dans les solutions Office