Comment : créer des balises actives avec des modules de reconnaissance personnalisés dans Word et dans .NET Framework 3.5

Dans les projets Word qui ciblent .NET Framework 3.5, vous pouvez contrôler la manière dont Word reconnaît les balises actives dans les documents en dérivant de la classe Microsoft.Office.Tools.Word.SmartTag et en substituant la méthode Recognize.

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

Pour exécuter des balises actives, ces dernières doivent être activées. Pour plus d'informations, consultez Comment : activer des balises actives dans Word et Excel.

lien vers la vidéoPour obtenir une version vidéo de cette rubrique, consultez Comment faire pour créer des balises actives dans Word ? (page éventuellement en anglais). Pour une démonstration vidéo connexe, consultez Comment faire pour utiliser des balises actives dans Microsoft Word ? (page éventuellement en anglais).

Pour ajouter une balise active avec un module de reconnaissance personnalisé à un document Word

  1. Créez un projet au niveau du document ou de l'application pour Word 2007. Pour plus d'informations, consultez Comment : créer des projets Office dans Visual Studio.

  2. Ajoutez une référence à l'assembly Microsoft.Office.Interop.SmartTag (version 12.0.0.0) à partir de l'onglet .NET de la boîte de dialogue Ajouter une référence.

  3. Ajoutez un fichier de classe au projet et créez une classe qui hérite de Microsoft.Office.Tools.Word.SmartTag.

  4. Dans la nouvelle classe, créez les actions pour les balises actives. Les actions sont des éléments qui apparaissent dans le menu Balise active. Créez des actions en ajoutant des instances du type Action à la collection Actions de votre classe.

  5. Substituez la méthode SmartTagBase.Recognize pour implémenter votre propre comportement de reconnaissance personnalisé.

    Votre substitution de la méthode Recognize doit appeler la méthode Microsoft.Office.Tools.Word.SmartTag.PersistTag pour que Word reconnaisse la balise active.

  6. Créez des gestionnaires d'événements pour répondre à l'événement Click et, éventuellement, à l'événement BeforeCaptionShow, des actions que vous avez créées.

  7. Dans le fichier de code pour le document du projet, ajoutez l'instance de balise active à la propriété VstoSmartTags de la classe ThisDocument (pour un projet au niveau du document) ou la propriété VstoSmartTags de la classe ThisAddIn (pour un projet au niveau de l'application).

Exemple

L'exemple de code suivant indique comment créer une balise active personnalisée dans un document Word. Il substitue la méthode Recognize pour reconnaître les termes sales et organization. La méthode Recognize ajoute une paire clé-valeur à la collection de propriétés à clé de la balise active. La méthode appelle ensuite la méthode PersistTag pour reconnaître la balise active et enregistrer la nouvelle propriété de balise active.

Pour tester l'exemple, tapez les mots anglais sales et organization dans différents emplacements du document, puis essayez les actions de la balise active. Une action affiche la valeur de propriété correspondante pour le terme reconnu, et l'autre action affiche l'espace de noms et la légende de la balise active.

Imports Microsoft.Office.Tools.Word
Imports Microsoft.Office.Interop.SmartTag

Public Class CustomSmartTag
    Inherits SmartTag

    ' Declare Actions for this SmartTag
    WithEvents Action1 As New Action("Display property value")
    WithEvents Action2 As New Action("Display smart tag details")

    Public Sub New()
        MyBase.New("https://www.contoso.com/Demo#DemoSmartTag", _
            "Custom Smart Tag")
        Me.Terms.AddRange(New String() {"sales", "organization"})
        Actions = New Action() {Action1, Action2}
    End Sub

    Protected Overrides Sub Recognize(ByVal text As String, _
        ByVal site As ISmartTagRecognizerSite, _
        ByVal tokenList As ISmartTagTokenList)

        ' Determine whether each smart tag term exists in 
        ' the document text.
        Dim Term As String
        For Each Term In Me.Terms

            ' Search the text for the current smart tag term.
            Dim index As Integer = Me.ParagraphText.IndexOf(Term, 0)

            While (index >= 0)

                ' Create a smart tag token and a property bag for the 
                ' recognized term.
                Dim propertyBag As ISmartTagProperties = _
                    site.GetNewPropertyBag()

                ' Write a new property value.
                Dim key As String = "Key1"
                propertyBag.Write(key, DateTime.Now)

                ' Attach the smart tag to the term in the document
                Me.PersistTag(index, Term.Length, propertyBag)

                ' Increment the index and then find the next
                ' instance of the smart tag term.
                index += Term.Length
                index = ParagraphText.IndexOf(Term, index)
            End While
        Next
    End Sub

    ' This action displays the property value for the term.
    Private Sub Action1_Click(ByVal sender As Object, _
        ByVal e As ActionEventArgs) Handles Action1.Click

        Dim propertyBag As ISmartTagProperties = e.Properties
        Dim key As String = "Key1"
        MsgBox("The corresponding value of " & _
            key & " is: " & propertyBag.Read(key))
    End Sub

    ' This action displays smart tag details.
    Private Sub Action2_Click(ByVal sender As Object, _
        ByVal e As ActionEventArgs) Handles Action2.Click

        MsgBox("The current smart tag caption is '" & _
            Me.Caption & "'. The current smart tag type is '" & _
            Me.SmartTagType & "'.")
    End Sub
End Class
using System;
using System.Windows.Forms;
using Microsoft.Office.Tools.Word;
using Microsoft.Office.Interop.SmartTag;

public class CustomSmartTag : Microsoft.Office.Tools.Word.SmartTag
{

    // Declare Actions for this SmartTag
    private Microsoft.Office.Tools.Word.Action Action1 =
        new Microsoft.Office.Tools.Word.Action("Display property value");
    private Microsoft.Office.Tools.Word.Action Action2 =
        new Microsoft.Office.Tools.Word.Action("Display smart tag details");

    public CustomSmartTag() : base(
        "https://www.contoso.com/Demo#DemoSmartTag", 
        "Custom Smart Tag")
    {
        this.Terms.AddRange(new string[] { 
            "sales", "organization" });
        Actions = new Microsoft.Office.Tools.Word.Action[] { 
            Action1, Action2 };
        Action1.Click += 
            new ActionClickEventHandler(Action1_Click);
        Action2.Click += 
            new ActionClickEventHandler(Action2_Click);
    }

    protected override void Recognize(string text, 
        ISmartTagRecognizerSite site, ISmartTagTokenList tokenList)
    {
        foreach (string term in this.Terms)
        {
            // Search the text for the current smart tag term.
            int index = this.ParagraphText.IndexOf(term, 0);

            while (index >= 0)
            {
                // Create a smart tag token and a property bag for the 
                // recognized term.
                ISmartTagProperties propertyBag = 
                    site.GetNewPropertyBag();

                // Write a new property value.
                string key = "Key1";
                propertyBag.Write(key, DateTime.Now.ToString());

                // Attach the smart tag to the term in the document
                this.PersistTag(index, term.Length, propertyBag);

                // Increment the index and then find the next
                // instance of the smart tag term.
                index += term.Length;
                index = ParagraphText.IndexOf(term, index);
            }
        }
    }

    // This action displays the property value for the term.
    private void Action1_Click(object sender, 
        Microsoft.Office.Tools.Word.ActionEventArgs e)
    {
        ISmartTagProperties propertyBag = e.Properties;
        string key = "Key1";
        MessageBox.Show("The corresponding value of " + key + 
            " is: " + propertyBag.get_Read(key));
    }

    // This action displays smart tag details.
    private void Action2_Click(object sender, 
        Microsoft.Office.Tools.Word.ActionEventArgs e)
    {
        MessageBox.Show("The current smart tag caption is '" + 
            this.Caption + "'. The current smart tag type is '" + 
            this.SmartTagType + "'.");
    }
}

Compilation du code

  • Ajoutez une référence dans le projet à Bibliothèque de types Microsoft Smart Tags 2.0 de l'onglet COM de la boîte de dialogue Ajouter une référence. Vérifiez que la propriété Copie locale de la référence a la valeur false. Si la valeur est true, la référence n'est pas l'assembly PIA (Primary Interop Assembly) correct et vous devez installer l'assembly à partir du média d'installation Microsoft Office. Pour plus d'informations, consultez Comment : installer les assemblys PIA (Primary Interop Assembly) d'Office.

  • Placez l'exemple de code dans un nouveau fichier de classe appelé CustomSmartTag.

  • En C#, modifiez l'espace de noms pour faire correspondre le nom du projet.

  • Ajoutez des instructions Imports (en Visual Basic) ou using (en C#) pour les espaces de noms Microsoft.Office.Tools.Word et Microsoft.Office.Interop.SmartTag en haut du fichier de classe.

  • Ajoutez le code suivant au gestionnaire d'événements ThisDocument_Startup ou ThisAddIn_Startup de votre projet. Ce code ajoute la balise active personnalisée au document.

    Me.VstoSmartTags.Add(New CustomSmartTag())
    
    this.VstoSmartTags.Add(new CustomSmartTag());
    

Sécurité

Pour exécuter la balise active, celles-ci doivent être activées dans Word. Pour plus d'informations, consultez Comment : activer des balises actives dans Word et Excel.

Voir aussi

Tâches

Comment : activer des balises actives dans Word et Excel

Comment : ajouter des balises actives à des documents Word

Comment : ajouter des balises actives aux classeurs Excel

Comment : créer des balises actives avec des modules de reconnaissance personnalisés dans Excel et dans .NET Framework 3.5

Procédure pas à pas : création d'une balise active à l'aide d'une personnalisation au niveau du document

Procédure pas à pas : création d'une balise active à l'aide d'un complément d'application

Concepts

Architecture des balises actives

Autres ressources

Vue d'ensemble des balises actives