Partager via


Procédure pas à pas : ajout de contrôles à un document au moment de l'exécution dans un complément d'application

Mise à jour : Juillet 2008

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 de l'application

Version de Microsoft Office

  • Word 2007

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

À compter de Visual Studio 2008 Service Pack 1 (SP1), vous pouvez ajouter des contrôles à tout document Microsoft Office Word 2007 ouvert en utilisant un complément d'application. Cette procédure pas à pas explique comment utiliser le ruban pour permettre aux utilisateurs d'ajouter un Button ou un RichTextContentControl à un document.

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

  • Création d'un projet de complément Word

  • Fourniture d'une interface utilisateur (IU) permettant d'ajouter des contrôles au document

  • Ajout de contrôles au document au moment de l'exécution

  • Suppression de contrôles dans le document

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

Pour exécuter cette procédure pas à pas, vous avez besoin des éléments suivants :

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

  • Visual Studio 2008 SP1,

  • Microsoft Office Word 2007.

Création d'un projet de complément Word

Commencez par créer un projet de complément Word 2007.

Pour créer un projet de complément Word

Fourniture d'une interface utilisateur permettant l'ajout de contrôles à un document

Ajoutez un onglet personnalisé au ruban dans Word. Les utilisateurs peuvent activer des cases à cocher sur l'onglet afin d'ajouter des contrôles à un document.

Pour fournir une interface utilisateur permettant l'ajout de contrôles à un document

  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 MyRibbon, puis cliquez sur Ajouter.

    Le fichier MyRibbon.cs ou MyRibbon.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 de group1 comme Ajouter des contrôles.

  6. Sous l'onglet Contrôles de ruban Office de la Boîte à outils, faites glisser un contrôle CheckBox sur group1.

  7. Cliquez sur CheckBox1 afin de le sélectionner.

  8. Dans la fenêtre Propriétés, modifiez les propriétés suivantes.

    Propriété

    Valeur

    Nom

    addButtonComboBox

    Label

    Ajouter un bouton

  9. Ajoutez une deuxième case à cocher dans group1, puis modifiez les propriétés suivantes.

    Propriété

    Valeur

    Nom

    addRichTextCheckBox

    Label

    Ajouter un contrôle de texte enrichi

  10. Dans le concepteur de ruban, double-cliquez sur Ajouter un bouton.

    Le gestionnaire d'événements Click de la case à cocher Ajouter un bouton s'ouvre dans l'Éditeur de code.

  11. Retournez dans le Concepteur de ruban, et double-cliquez sur Ajouter un contrôle de texte enrichi.

    Le gestionnaire d'événements Click de la case à cocher Ajouter un contrôle de texte enrichi s'ouvre dans l'Éditeur de code.

À une étape ultérieure de cette procédure, vous ajouterez du code à ces gestionnaires d'événements pour ajouter et supprimer des contrôles sur le document actif.

Ajout et suppression de contrôles sur le document actif

Dans le code de complément, vous devez convertir le document actif en un élément hôteMicrosoft.Office.Tools.Word.Document avant de pouvoir ajouter un contrôle. Dans les solutions Visual Studio Tools pour Office, les contrôles managés peuvent être ajoutés uniquement aux éléments hôtes, qui agissent comme conteneurs pour les contrôles. Dans les projets de complément d'application, les éléments hôtes peuvent être créés uniquement au moment de l'exécution, en utilisant la méthode GetVstoObject.

Ajoutez des méthodes à la classe ThisAddIn qui peut être appelée pour ajouter ou supprimer un Button ou RichTextContentControl sur le document actif. À une étape ultérieure de cette procédure, vous appellerez ces méthodes à partir des gestionnaires d'événements Click des cases à cocher du ruban.

Pour ajouter et supprimer des contrôles sur le document actif

  1. Dans l'Explorateur de solutions, double-cliquez sur ThisAddIn.cs ou ThisAddIn.vb afin d'ouvrir le fichier dans l'Éditeur de code.

  2. Ajoutez le code suivant à la classe ThisAddIn : Ce code déclare les objets Button et RichTextContentControl qui représentent les contrôles qui seront ajoutés au document.

    Private button As Microsoft.Office.Tools.Word.Controls.Button = Nothing
    Private richTextControl As RichTextContentControl = Nothing
    
    private Microsoft.Office.Tools.Word.Controls.Button button = null;
    private RichTextContentControl richTextControl = null;
    
  3. Ajoutez la méthode suivante à la classe ThisAddIn. Lorsque l'utilisateur clique sur la case à cocher Ajouter un bouton sur le ruban, cette méthode ajoute un Button à la sélection actuelle sur le document si la case à cocher est activée, ou supprime le Button si la case à cocher est désactivée.

    Friend Sub ToggleButtonOnDocument()
        Dim nativeDocument As Word.Document = Globals.ThisAddIn.Application.ActiveDocument
        Dim vstoDocument As Document = nativeDocument.GetVstoObject()
        Dim name As String = "MyButton"
    
        If Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked Then
            If Globals.ThisAddIn.Application.Selection IsNot Nothing Then
                button = vstoDocument.Controls.AddButton( _
                    Globals.ThisAddIn.Application.Selection.Range, 100, 30, name)
            End If
        Else
            vstoDocument.Controls.Remove(name)
        End If
    End Sub
    
    internal void ToggleButtonOnDocument()
    {
        Word.Document nativeDocument = Globals.ThisAddIn.Application.ActiveDocument;
        Document vstoDocument = nativeDocument.GetVstoObject();
        string name = "MyButton";
    
        if (Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked)
        {
            if (Globals.ThisAddIn.Application.Selection != null)
            {
                button = vstoDocument.Controls.AddButton(
                    Globals.ThisAddIn.Application.Selection.Range, 100, 30, name);
            }
        }
        else
        {
            vstoDocument.Controls.Remove(name);
        }
    }
    
  4. Ajoutez la méthode suivante à la classe ThisAddIn. Lorsque l'utilisateur clique sur la case à cocher Ajouter un contrôle de texte enrichi sur le ruban, cette méthode ajoute un RichTextContentControl à la sélection actuelle sur le document si la case à cocher est activée, ou supprime le RichTextContentControl si la case à cocher est désactivée.

    Friend Sub ToggleRichTextControlOnDocument()
        Dim nativeDocument As Word.Document = Globals.ThisAddIn.Application.ActiveDocument
        Dim vstoDocument As Document = nativeDocument.GetVstoObject()
        Dim name As String = "MyRichTextBoxControl"
    
        If Globals.Ribbons.MyRibbon.addRichTextCheckBox.Checked Then
            If Globals.ThisAddIn.Application.Selection IsNot Nothing Then
                richTextControl = vstoDocument.Controls.AddRichTextContentControl( _
                        Globals.ThisAddIn.Application.Selection.Range, name)
            End If
        Else
            vstoDocument.Controls.Remove(name)
        End If
    End Sub
    
    internal void ToggleRichTextControlOnDocument()
    {
        Word.Document nativeDocument = Globals.ThisAddIn.Application.ActiveDocument;
        Document vstoDocument = nativeDocument.GetVstoObject();
        string name = "MyRichTextBoxControl";
    
        if (Globals.Ribbons.MyRibbon.addRichTextCheckBox.Checked)
        {
            if (Globals.ThisAddIn.Application.Selection != null)
            {
                richTextControl = vstoDocument.Controls.AddRichTextContentControl(
                    Globals.ThisAddIn.Application.Selection.Range, name);
            }
        }
        else
        {
            vstoDocument.Controls.Remove(name);
        }
    }
    

Suppression du contrôle Button lorsque le document est enregistré

Les contrôles Windows Forms ne deviennent pas persistants lorsque le document est enregistré puis fermé. Toutefois, il reste un wrapper ActiveX pour chaque contrôle dans le document, et la bordure de ce wrapper peut être vue par les utilisateurs finaux lorsque le document est rouvert. Il y a plusieurs méthodes pour nettoyer des contrôles Windows Forms créés dynamiquement dans des compléments. Dans cette procédure pas à pas, vous supprimez le contrôle Button par programme lorsque le document est enregistré.

Pour supprimer le contrôle Button lorsque le document est enregistré

  1. Dans le fichier de code ThisAddIn.cs ou ThisAddIn.vb, ajoutez la méthode suivante à la classe ThisAddIn. Cette méthode est un gestionnaire d'événements pour l'événement DocumentBeforeSave. Si un élément hôte Document est associé au document enregistré, le gestionnaire d'événements obtient l'élément hôte et supprime le contrôle Button, s'il existe.

    Private Sub Application_DocumentBeforeSave(ByVal Doc As Word.Document, _
        ByRef SaveAsUI As Boolean, ByRef Cancel As Boolean) Handles Application.DocumentBeforeSave
        If Doc.HasVstoObject() Then
            Dim vstoDocument As Document = Doc.GetVstoObject()
            If vstoDocument.Controls.Contains(button) Then
                vstoDocument.Controls.Remove(button)
                Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked = False
            End If
        End If
    End Sub
    
    private void Application_DocumentBeforeSave(Word.Document Doc, 
        ref bool SaveAsUI, ref bool Cancel)
    {
        if (Doc.HasVstoObject())
        {
            Document vstoDocument = Doc.GetVstoObject();
    
            if (vstoDocument.Controls.Contains(button))
            {
                vstoDocument.Controls.Remove(button);
                Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked = false;
            }
        }
    }
    
  2. Dans C#, ajoutez le code suivant au gestionnaire d'événements ThisAddIn_Startup. Ce code est requis en C# pour connecter le gestionnaire d'événements Application_DocumentBeforeSave à l'événement DocumentBeforeSave.

    this.Application.DocumentBeforeSave += 
        new Word.ApplicationEvents4_DocumentBeforeSaveEventHandler(
        Application_DocumentBeforeSave);
    

Ajout et suppression de contrôles lorsque l'utilisateur clique sur les cases à cocher sur le ruban

Enfin, modifiez les gestionnaires d'événements Click des cases à cocher que vous avez ajoutées au ruban afin d'ajouter ou de supprimer des contrôles sur le document.

Pour ajouter ou supprimer des contrôles lorsque l'utilisateur clique sur les cases à cocher sur le ruban

  • Dans le fichier de code MyRibbon.cs ou MyRibbon.vb, remplacez les gestionnaires d'événements addButtonCheckBox_Click et addRichTextCheckBox_Click générés par le code suivant. Ce code redéfinit ces gestionnaires d'événements afin d'appeler les méthodes ToggleButtonOnDocument et ToggleRichTextControlOnDocument que vous avez ajoutées à la classe ThisAddIn ultérieurement dans cette procédure pas à pas.

    Private Sub addButtonCheckBox_Click(ByVal sender As System.Object, _
        ByVal e As RibbonControlEventArgs) Handles addButtonCheckBox.Click
        Globals.ThisAddIn.ToggleButtonOnDocument()
    End Sub
    
    Private Sub addRichTextCheckBox_Click(ByVal sender As System.Object, _
        ByVal e As RibbonControlEventArgs) Handles addRichTextCheckBox.Click
        Globals.ThisAddIn.ToggleRichTextControlOnDocument()
    End Sub
    
    private void addButtonCheckBox_Click(object sender, RibbonControlEventArgs e)
    {
        Globals.ThisAddIn.ToggleButtonOnDocument();
    }
    
    private void addRichTextCheckBox_Click(object sender, RibbonControlEventArgs e)
    {
        Globals.ThisAddIn.ToggleRichTextControlOnDocument();
    }
    

Test de la solution

Ajoutez des contrôles à un document en les sélectionnant depuis l'onglet personnalisé sur le ruban. Lorsque vous enregistrez le document, le contrôle Button est supprimé.

Pour tester la solution

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

  2. Dans le document actif, appuyez plusieurs fois sur ENTRÉE pour y ajouter de nouveaux paragraphes vides.

  3. Sélectionnez le premier paragraphe.

  4. Cliquez sur l'onglet Compléments.

  5. Dans le groupe Ajouter des contrôles, cliquez sur Ajouter un bouton.

    Un bouton apparaît dans le premier paragraphe.

  6. Sélectionnez le dernier paragraphe.

  7. Dans le groupe Ajouter des contrôles, cliquez Ajouter un contrôle de texte enrichi.

    Un contrôle de contenu en texte enrichi est ajouté au dernier paragraphe.

  8. Enregistrez le document.

    Le bouton est supprimé du document.

Étapes suivantes

Vous pouvez approfondir votre connaissance des contrôles dans les compléments d'application en consultant les rubriques suivantes :

Voir aussi

Tâches

Comment : ajouter des contrôles Windows Forms à des documents Office

Comment : ajouter des contrôles de contenu à des documents Word

Contrôles dynamiques de complément Word, exemple

Concepts

Développement d'un complément d'application pour Word

Ajout de contrôles à des documents Office au moment de l'exécution

Rendre des contrôles dynamiques persistants dans des documents Office

Extension de documents Word et de classeurs Excel dans des compléments d'application au moment de l'exécution.

Historique des modifications

Date

Historique

Raison

Juillet 2008

Ajout d'une rubrique.

Modifications de fonctionnalités dans le SP1.