【发布时间】:2013-01-21 17:29:47
【问题描述】:
我正在尝试在我的 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 更新 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。
【问题讨论】:
-
这是 MEF 扩展吗?如果您使用的是 MPF 或本机扩展,在某些时候,您会收到带有
IServiceProvider的调用 SetSite。使用该服务提供者为IOleCommandTarget使用SUIHostCommandDispatch(see here] 的服务定义执行QueryService。然后调用该服务的Exec方法而不是使用DTE 的raise 命令。DTE 经历了这么多让我畏缩的数据翻译层。 -
对于使用我提到的方法的参数,使用
CComVariant对象。
标签: visual-studio-2012 vspackage