Procédure pas à pas : création de menus contextuels pour les signets

Mise à jour : novembre 2007

S'applique à

Les informations de cette rubrique s'appliquent uniquement aux projets Visual Studio Tools pour Office et versions de Microsoft Office spécifiés.

Type de projet

  • Projets au niveau du document

Version de Microsoft Office

  • Word 2007

  • Word 2003

Pour plus d'informations, consultez Fonctionnalités disponibles par type d'application et de projet.

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.

Cette procédure pas à pas illustre 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

Remarque :

Il est possible que votre ordinateur affiche des noms ou des emplacements différents pour certains des éléments d'interface utilisateur 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

Vous avez besoin des composants suivants pour exécuter cette procédure pas à pas :

  • Visual Studio Tools pour Office (composant facultatif de Visual Studio 2008 Professional et Visual Studio Team System)

  • Microsoft Office Word 2003 ou Microsoft Office Word 2007

Visual Studio Tools pour Office est installé par défaut avec les versions répertoriées de Visual Studio. Pour vérifier s'il est installé, consultez Installation de Visual Studio Tools pour Office.

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 et attribuez-lui 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 Visual Studio Tools pour Office.

    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

  1. À 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.

  2. 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.

  3. Ajoutez un autre contrôle Bookmark aux mots cliquez avec le bouton droit sur le texte dans un signet.

    bookmark2 est ajouté au document.

    Remarque :

    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

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur ThisDocument, puis cliquez sur Afficher le code.

  2. 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;
    
  3. 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;
    }
    
  4. 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

  1. 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;
            } 
        }
    }
    
  2. Ajoutez un gestionnaire d'événements showPopupMenu pour gérer l'événement BeforeRightClick des deux signets.

    Remarque :

    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++)
        {
            object o = i;
            if (e.Selection.Bookmarks.get_Item(ref o).Start > startPosition)
            {
                startPosition = e.Selection.Bookmarks.get_Item(ref o).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;
        }
    
    
    }
    
  3. 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 Visual Studio Tools pour 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

  1. Appuyez sur F5 pour exécuter votre projet.

  2. Cliquez avec le bouton droit dans le premier signet, puis cliquez sur Gras.

  3. Vérifiez que la mise en forme de l'ensemble du texte dans bookmark1 est en gras.

  4. Cliquez avec le bouton droit sur le texte, à l'endroit où les signets se chevauchent, puis cliquez sur Italique.

  5. 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 :

Voir aussi

Concepts

Procédures pas à pas utilisant Word

Personnalisation de l'interface utilisateur Office

Bookmark, contrôle

Fonctionnement des paramètres optionnels dans les solutions Office

Autres ressources

Contrôles hôtes Word