我想写一个单词addin做一些计算,并在用户输入内容或移动当前插入点时更新一些ui。从查看MSDN文档,我没有看到任何明显的方法,如文档或应用程序对象上的TextTyped事件。
有人知道这是否可以在不轮询文件的情况下进行?
答案 0 :(得分: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;
}
}
答案 1 :(得分:1)
正如您可能已经发现的那样,Word has events,但它们是非常粗略的操作,例如文档打开或切换到另一个文档。我猜测MS故意这样做是为了防止蹩脚的宏减慢打字速度。
简而言之,没有什么好办法可以做你想做的事。 A Word MVP confirms that in this thread.