ユーザーが何かを入力したり、現在の挿入ポイントを移動したりするたびに、いくつかの計算を行い、いくつかの UI を更新する単語アドインを作成したいと考えています。MSDN のドキュメントを見ると、ドキュメント オブジェクトやアプリケーション オブジェクトに対する TextTyped イベントなどの明らかな方法は見当たりません。
ドキュメントをポーリングせずにこれが可能かどうかは誰にもわかりますか?
実際には、単語が入力されたときにコードを実行する方法があり、SmartTags を使用して Recognize メソッドをオーバーライドできます。このメソッドは、単語が入力されるたびに呼び出されます。つまり、ユーザーがテキストを入力してスペースを押すたびに呼び出されます。 、タブ、またはキーを入力します。
ただし、これに関する 1 つの問題は、「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 は、このスレッドでそれを確認します。