我想编写一个单词插件,每当用户键入某些内容或移动当前插入点时,它都会进行一些计算并更新一些 ui。通过查看 MSDN 文档,我没有看到任何明显的方式,例如文档或应用程序对象上的 TextTyped 事件。
有谁知道这是否可能不轮询文件?
实际上有一种方法可以在输入一个单词时运行一些代码,你可以使用 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;
}
}
您可能已经发现,Word 有事件,但它们用于非常粗略的操作,例如打开文档或切换到另一个文档。我猜 MS 这样做是为了防止糟糕的宏减慢打字速度。
简而言之,没有什么好方法可以做你想做的事。 Word MVP 在此线程中证实了这一点。