Frage

Ich möchte ein Word-Add-In schreiben, das einige Berechnungen durchführt und die Benutzeroberfläche aktualisiert, wenn der Benutzer etwas eingibt oder die aktuelle Einfügemarke verschiebt.Wenn ich mir die MSDN-Dokumente ansehe, sehe ich keine offensichtliche Möglichkeit, beispielsweise ein TextTyped-Ereignis für das Dokument oder die Anwendungsobjekte.

Weiß jemand, ob dies möglich ist, ohne das Dokument abzufragen?

War es hilfreich?

Lösung

Wie Sie wahrscheinlich entdeckt haben, Wort hat Veranstaltungen , aber sie sind für wirklich grobe Aktionen wie ein Dokument geöffnet oder einem Wechsel auf ein anderes Dokument. Ich vermute, MS tat dies absichtlich verlangsamt Typisierung ein crappy Makro zu verhindern.

Kurz gesagt, gibt es keine gute Möglichkeit, zu tun, was Sie wollen. Ein Wort MVP bestätigt, dass in diesem Thread.

Andere Tipps

Eigentlich gibt es einen Weg, um einige Code auszuführen, wenn ein Wort eingegeben wurde, können Sie Smarttags verwenden, und überschreiben Sie die Methode erkennen, wird diese Methode aufgerufen werden, wenn ein Worttyp ist, was bedeutet, wenn der Benutzer einen Text eingegeben und trifft den Raum, Tab oder Enter-Taste.

Ein Problem dabei ist jedoch, dass, wenn Sie den Text ändern, mit „Range.Text“ es es als Wortwechsel erkennt und die Funktion aufrufen, so dass es Endlosschleifen führen kann.

Hier finden Sie einige Code, den ich diese verwendet zu erreichen:

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;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top