Comment puis-je détecter Texte et de la position du Curseur de modifications dans Word à l'aide de VSTO

StackOverflow https://stackoverflow.com/questions/55735

  •  09-06-2019
  •  | 
  •  

Question

Je veux écrire un mot addin qui fait les calculs et les mises à jour d'une interface utilisateur à chaque fois que l'utilisateur tape quelque chose ou déplace le point d'insertion en cours.En regardant le MSDN docs, je ne vois pas de façon évidente comme un TextTyped événement sur le document ou les objets de l'application.

Personne ne sait si cela est possible sans l'interrogation du document?

Était-ce utile?

La solution

Comme vous l'avez probablement découvert, Le mot a des événements, mais ils sont vraiment grossiers actions comme un document ouvert ou passer à un autre document.Je devine que MS l'a fait exprès pour éviter une merde macro de ralentir la frappe.

En bref, il n'y a pas grand chemin à faire ce que vous voulez. Un Mot MVP confirme que dans ce fil.

Autres conseils

En fait il y a un moyen d'exécuter du code lorsqu'un terme a été tapé, vous pouvez utiliser les balises actives, et de remplacer le Reconnaître méthode, cette méthode sera appelée chaque fois qu'un mot est type, ce qui signifie que chaque fois que l'utilisateur a tapé du texte et frappé de l'espace, tabulation ou la touche enter.

un problème avec cela, cependant, est que si vous modifiez le texte à l'aide de Gamme".Le texte" il va le détecter comme un changement de mot et d'appeler la fonction de sorte qu'il peut provoquer une boucle infinie.

Voici un code que j'ai utilisé pour réaliser ceci:

public class AutoBrandSmartTag : SmartTag
{
    Microsoft.Office.Interop.Word.Document cDoc;

    Microsoft.Office.Tools.Word.Action act = new Microsoft.Office.Tools.Word.Action("Test Action");

    public AutoBrandSmartTag(AutoBrandEngine.AutoBrandEngine _engine, Microsoft.Office.Interop.Word.Document _doc)
        : base("AutoBrandTool.com/SmartTag#AutoBrandSmartTag", "AutoBrand SmartTag")
    {
        this.cDoc = _doc;

        this.Actions = new Microsoft.Office.Tools.Word.Action[] { act };
    }

    protected override void Recognize(string text, Microsoft.Office.Interop.SmartTag.ISmartTagRecognizerSite site, 
        Microsoft.Office.Interop.SmartTag.ISmartTagTokenList tokenList)
    {
        if (tokenList.Count < 1)
            return;

        int start = 0;
        int length = 0;
        int index = tokenList.Count > 1 ? tokenList.Count - 1 : 1;

        ISmartTagToken token = tokenList.get_Item(index);

        start = token.Start;
        length = token.Length;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top