FindContext内で結果を検出すると、ContentControlOnEnterイベントとContentControlOnExitイベントが発生するように見えます。選択イベントがコンテンツコントロール内にあっても終了イベントが発生するので、特に迷惑なので、アクティブなコンテンツコントロールに応じてボタンの状態を設定するコードはすべて正しくない状態に見えます。MS Word VSTO Addin Find.ExecuteはContentControlOnEnterイベントを発生させます
与えられた単語「テスト」、との単一のコンテンツコントロールを含むドキュメントと、次のコード:以下記録されます
// In setup
Application.ActiveDocument.ContentControlOnEnter += ActiveDocument_ContentControlOnEnter;
private void ActiveDocument_ContentControlOnEnter(Word.ContentControl ContentControl)
{
var selRange = _Application.Selection.Range;
_logger.Debug(m => m("Selection: {0}-{1}", selRange.Start, selRange.End));
}
//Later in another method
var finder = _Application.ActiveDocument.Range().Find;
_logger.Debug("Find.Execute start");
finder.Execute("test);
_logger.Debug("Find.Execute end");
:私たちは多くのコードを持っている
38137 [VSTA_Main] DEBUG - Find.Execute start
38141 [VSTA_Main] DEBUG - Selection: 1-5
38149 [VSTA_Main] DEBUG - Find.Execute end
ことContentControlOnEnterイベントとContentControlOnExitイベントを処理し、find操作の原因となっているので、実際に問題が発生しています。
これらのイベントを引き起こさずにFind.Executeを使用する方法はありますか?それに失敗した場合、Findトリガのものと本物のものを区別する良い方法はありますか?私は入力イベントと終了イベントの間の時間を使用しようとしましたが、これは信頼できません。
をFind.Executeが終了した後にenterイベントが発生することがあるので、イベントハンドラのコードが実行されるまでにboolフラグがfalseになることがあります。私はそれをショットを与えるだろう! – Zout