无法在VS 2012 Extension中设置某些“查找选项”

时间:2013-01-21 17:29:47

标签: visual-studio-2012 vspackage

我正在尝试在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。

1 个答案:

答案 0 :(得分:1)

DTE.Find对象是有状态的。当您调用Execute方法时,它会将其状态刷新到查找对话框。换句话说,它不允许您在不执行搜索的情况下更改搜索选项。

搜索字词的设置是另一回事。在引擎盖下,有一个cmdidSetSearchCombo(从内存中调用),只允许您设置搜索项,并在设置FindWhat DTE.Find字段时执行该命令。

作为一种变通方法,您可以使用控制字符执行搜索,以将设置刷新到对话框。我会使用\r\n作为搜索字词,同时取消设置多行搜索选项,以确保找不到匹配项。毋庸置疑,这是一个黑客行为,如果其他所有方法都失败了你就应该诉诸于此,而你就要哭了。

您是否尝试在文本编辑器中进行搜索?编辑器通过MEF公开ITextSearchService2服务,这将允许您进行作用于单个文档的搜索,而无需与查找对话框进行交互。