【发布时间】:2011-01-31 20:38:25
【问题描述】:
当鼠标移到某个代码元素上时,我搜索了一种从我的 C# 插件 Visual Studio 扩展中获取 Quick Info 中显示的内容的方法,但没有成功。
我希望有一种优雅的方式来做到这一点。
谢谢。
【问题讨论】:
当鼠标移到某个代码元素上时,我搜索了一种从我的 C# 插件 Visual Studio 扩展中获取 Quick Info 中显示的内容的方法,但没有成功。
我希望有一种优雅的方式来做到这一点。
谢谢。
【问题讨论】:
我没有代码示例,但找到了ViewFilter.HandleQuickInfo 方法的以下文档,这听起来像是您需要执行的步骤。
基方法调用IVsTextView 对象上的GetCaretPos 方法,传递给ViewFilter 构造函数以获取当前插入符号位置。然后将此位置传递给Source 对象(从ViewFilter 构造函数中的CodeWindowManager 对象获得)的OnSyncQuickInfo(IVsTextView, Int32, Int32) 方法。如果 OnSyncQuickInfo(IVsTextView, Int32, Int32) 返回任何文本,如果调试处于活动状态,此方法接下来会调用 GetFullDataTipText 方法从调试器获取任何附加信息。最后,一个新的(或当前的)TextTipData 对象用于显示工具提示。
编辑:
您可以使用IVsTextManager 检索当前的IVsTextView。
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。
【讨论】:
快速视图显示了类中存在和可访问的方法和属性,因此一种解决方案是使用反射来获取此信息。
//获取MyClass类的方法 MethodInfo[] methodInfos = typeof(MyClass).GetMethods(BindingFlags.Public | BindingFlags.Static);
【讨论】: