Condividi tramite


Procedura: creare smart tag con sistemi di riconoscimento personalizzati in Word e .NET Framework 3.5

Nei progetti Word destinati a .NET Framework 3.5, è possibile controllare il riconoscimento degli smart tag nei documenti di Word derivando i dati dalla classe Microsoft.Office.Tools.Word.SmartTag ed eseguendo l'override del metodo Recognize.

Si applica a: le informazioni fornite in questo argomento sono valide per i progetti a livello di documento e di applicazione per Word 2007. Per ulteriori informazioni, vedere Funzionalità disponibili in base ai tipi di progetto e applicazioni di Office.

Per eseguire uno smart tag, gli utenti finali devono avere abilitato gli smart tag. Per ulteriori informazioni, vedere Procedura: abilitare gli smart tag in Word ed Excel.

Collegamento a videoPer una versione video di questo argomento, vedere How Do I: Create Smart Tags in Word (la pagina potrebbe essere in inglese). Per una dimostrazione video correlata, vedere la procedura di utilizzo degli smart tag in Microsoft Word.

Per aggiungere uno smart tag con un sistema di riconoscimento personalizzato a un documento di Word

  1. Creare un nuovo progetto a livello di documento o di applicazione per Word 2007. Per ulteriori informazioni, vedere Procedura: creare progetti di Office in Visual Studio.

  2. Aggiungere un riferimento all'assembly Microsoft.Office.Interop.SmartTag (versione 12.0.0.0) dalla scheda .NET della finestra di dialogo Aggiungi riferimento.

  3. Aggiungere un file di classe al progetto e creare una classe che eredita da Microsoft.Office.Tools.Word.SmartTag.

  4. Nella nuova classe, creare le azioni per gli smart tag. Le azioni sono le voci che appariranno nel menu degli smart tag. Creare azioni aggiungendo istanze del tipo Action all'insieme Actions della classe.

  5. Eseguire l'override del metodo SmartTagBase.Recognize per implementare il comportamento di riconoscimento personalizzato.

    L'override del metodo Recognize deve consentire la chiamata del metodo Microsoft.Office.Tools.Word.SmartTag.PersistTag affinché lo smart tag venga riconosciuto in Word.

  6. Creare gestori eventi per rispondere all'evento Click, e facoltativamente anche all'evento BeforeCaptionShow, delle azioni create.

  7. Nel file di codice del documento del progetto, aggiungere l'istanza dello smart tag alla proprietà VstoSmartTags della classe ThisDocument (per un progetto a livello di documento) o alla proprietà VstoSmartTags della classe ThisAddIn (per un progetto a livello di applicazione).

Esempio

Nell'esempio di codice riportato di seguito viene illustrato come creare uno smart tag personalizzato in un documento di Word. Nell'esempio viene eseguito l'override del metodo Recognize per riconoscere i termini sales e organization. Il metodo Recognize aggiunge una coppia chiave-valore all'insieme delle proprietà con chiave per lo smart tag. Chiama quindi il metodo PersistTag per riconoscere lo smart tag e salvare la proprietà del nuovo smart tag.

Per testare l'esempio, digitare le parole sales e organization in differenti punti del documento, quindi provare a utilizzare le azioni dello smart tag. Un'azione consentirà di visualizzare il valore di proprietà corrispondente per il termine riconosciuto, mentre l'altra lo spazio dei nomi e il titolo dello smart tag.

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 + "'.");
    }
}

Compilazione del codice

  • Aggiungere un riferimento nel progetto a Libreria dei tipi Microsoft Smart Tags 2.0 dalla scheda COM della finestra di dialogo Aggiungi riferimento. Accertarsi che la proprietà Copia localmente del riferimento sia false. Se è true, il riferimento non è all'assembly di interoperabilità primario corretto e sarà necessario installare l'assembly dal supporto di installazione di Microsoft Office. Per ulteriori informazioni, vedere Procedura: installare assembly di interoperabilità primari di Office.

  • Copiare il codice di esempio in un nuovo file di classe denominato CustomSmartTag.

  • In C# modificare lo spazio dei nomi in modo che corrisponda al nome del progetto.

  • Aggiungere le istruzioni Imports (in Visual Basic) oppure using (in C#) per gli spazi dei nomi Microsoft.Office.Tools.Word e Microsoft.Office.Interop.SmartTag all'inizio del file della classe.

  • Aggiungere il codice seguente al gestore eventi ThisDocument_Startup o ThisAddIn_Startup contenuto nel progetto. Questo codice consente di aggiungere lo smart tag personalizzato al documento.

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

Sicurezza

Per eseguire lo smart tag, è necessario attivare gli smart tag in Word. Per ulteriori informazioni, vedere Procedura: abilitare gli smart tag in Word ed Excel.

Vedere anche

Attività

Procedura: abilitare gli smart tag in Word ed Excel

Procedura: aggiungere smart tag ai documenti di Word

Procedura: aggiungere smart tag a cartelle di lavoro di Excel

Procedura: creare smart tag con sistemi di riconoscimento personalizzati in Excel e .NET Framework 3.5

Procedura dettagliata: creazione di uno smart tag tramite una personalizzazione a livello di documento

Procedura dettagliata: creazione di uno smart tag tramite un componente aggiuntivo a livello di applicazione

Concetti

Architettura degli smart tag

Altre risorse

Cenni preliminari sugli smart tag