1

我想编写一个单词插件,每当用户键入某些内容或移动当前插入点时,它都会进行一些计算并更新一些 ui。通过查看 MSDN 文档,我没有看到任何明显的方式,例如文档或应用程序对象上的 TextTyped 事件。

有谁知道这是否可能不轮询文件?

4

2 回答 2

3

实际上有一种方法可以在输入一个单词时运行一些代码,你可以使用 SmartTags,并重写 Recognize 方法,只要输入一个单词就会调用这个方法,这意味着每当用户输入一些文本并点击空格、制表符或输入键。

然而,这样做的一个问题是,如果您使用“Range.Text”更改文本,它会将其检测为单词更改并调用该函数,因此可能会导致无限循环。

这是我用来实现此目的的一些代码:

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;
    }
}
于 2009-06-23T17:23:51.350 回答
1

您可能已经发现,Word 有事件,但它们用于非常粗略的操作,例如打开文档或切换到另一个文档。我猜 MS 这样做是为了防止糟糕的宏减慢打字速度。

简而言之,没有什么好方法可以做你想做的事。 Word MVP 在此线程中证实了这一点。

于 2008-09-11T05:47:51.693 回答