1

VS2012 拡張機能で検索ダイアログを開こうとしていますが、検索テキスト以外のオプションを設定できません。

    var dte=(_DTE)Package.GetGlobalService(typeof(_DTE));
    dte.ExecuteCommand("Edit.Find");

    // this gets set:
    dte.Find.FindWhat="test";

    // but all others are ignored:
    dte.Find.Target=vsFindTarget.vsFindTargetSolution;
    dte.Find.MatchCase=false;
    dte.Find.MatchWholeWord=true;

何か不足していますか?VS 2012 Update 1 を使用しています。


Ameen のおかげで、別のアプローチを試していますが、コマンドを発行するときに引数を設定する方法についてのドキュメントが見つかりません。

    object a=false;
    object b=null;
    dte.Commands.Raise(
      VSConstants.GUID_VSStandardCommandSet97.ToString("B").ToUpper(),
      (int)VSConstants.VSStd97CmdID.FindMatchCase, ref a, ref b);

これにより、常に E_INVALIDARG が返されます。

4

1 に答える 1

1

DTE.Findオブジェクトはステートフルです。メソッドを呼び出すと、その状態が検索ダイアログにフラッシュされますExecute。つまり、検索を実行せずに検索オプションを変更することはできません。

検索語の設定は別問題です。ボンネットの下にはcmdidSetSearchCombo、検索語のみを設定できる (メモリからの呼び出し) があり、そのコマンドは のFindWhatフィールドを設定したときに実行されますDTE.Find

回避策として、制御文字を使用して検索を実行し、設定をダイアログにフラッシュできます。検索用語としてa を使用し、\r\n同時に複数行検索オプションを設定解除して、一致が見つからないことを保証します。言うまでもなく、これはハックであり、他のすべてが失敗して泣きそうになった場合は、これに頼る必要があります.

テキストエディタで検索しようとしていますか? エディターは MEF を介してITextSearchService2サービスを公開します。これにより、検索ダイアログを操作しなくても、単一のドキュメントを対象とした検索を実行できます。

于 2013-01-21T17:38:20.067 に答える