如何以编程方式获取Visual Studio中的“快速信息”显示的信息

时间:2011-01-31 20:38:25

标签: c# visual-studio-addins

我在没有成功的情况下搜索了一个方法来从我的C#addin visual studio扩展中获取当鼠标移动到某个代码元素时Quick Info中显示的内容。

我希望有一种优雅的方式来做到这一点。

感谢。

2 个答案:

答案 0 :(得分:0)

我没有代码示例,但找到了ViewFilter.HandleQuickInfo方法的以下文档,这听起来像您需要执行的步骤。

  

base方法调用传递给GetCaretPos构造函数的IVsTextView对象上的ViewFilter方法来获取当前插入位置。然后将此位置传递给Source对象上的OnSyncQuickInfo(IVsTextView,Int32,Int32)方法(从CodeWindowManager构造函数中的ViewFilter对象获取)。如果OnSyncQuickInfo(IVsTextView,Int32,Int32)返回任何文本,则此方法接下来调用GetFullDataTipText方法,以便在调试处于活动状态时从调试器获取任何其他信息。最后,使用新的(或当前的)TextTipData对象来显示工具提示。

来源:ViewFilter.HandleQuickInfo

修改

您可以使用IVsTextView检索当前的IVsTextManager

var textManager = Resolve.Service<IVsTextManager, SVsTextManager>();

IVsTextView textView;
ErrorHandler.ThrowOnFailure(textManager.GetActiveView(fMustHaveFocus: 1, pBuffer: null, ppView: out textView));

Int32 caretRow, caretCol;
ErrorHandler.ThrowOnFailure(textView.GetCaretPos(out caretRow, out caretCol));

但是,我被困在那里,并且无法对IVsTextView.UpdateTipWindow做任何有用的事情,它从不在我传递的虚拟对象上调用任何东西,所以我认为它需要一个来自语言服务的已经可见的IVsTipWindow。

答案 1 :(得分:-1)

Quickview显示了类中存在且可访问的方法和属性,因此一种解决方案是使用反射来获取此信息。

//获取Class MyClass的方法 MethodInfo [] methodInfos = typeof(MyClass).GetMethods(BindingFlags.Public |                                                       BindingFlags.Static);