【问题标题】:How to get programmatically the information displayed by Quick Info in Visual Studio如何以编程方式获取 Visual Studio 中 Quick Info 显示的信息
【发布时间】:2011-01-31 20:38:25
【问题描述】:

当鼠标移到某个代码元素上时,我搜索了一种从我的 C# 插件 Visual Studio 扩展中获取 Quick Info 中显示的内容的方法,但没有成功。

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

谢谢。

【问题讨论】:

    标签: c# visual-studio-addins


    【解决方案1】:

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

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

    来源:ViewFilter.HandleQuickInfo

    编辑:

    您可以使用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。

    【讨论】:

    • 感谢您的回答,但不幸的是我已经测试了这个解决方案,但没有成功。
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢,但我想要的不是列出类的所有方法,而是获取快速查看的信息,当我将鼠标移到代码元素上时,我不知道该代码元素在哪个类中存在以使用您的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2018-01-06
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多