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

发布于 2024-10-14 22:22:06 字数 221 浏览 5 评论 0 原文

我搜索了一个没有成功的方法来从我的 C# 插件 Visual Studio 扩展中获取 快速信息 当鼠标移动到某些代码元素上时。

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

谢谢。

I searched without succes a method to get from my C# addin visual studio extension what displayed in the Quick Info when the mouse is moved over some code element.

I hope that there's an elegant way to do it.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

海未深 2024-10-21 22:22:06

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

基本方法调用 GetCaretPos IVsTextView 上的 方法> 对象传递给 ViewFilter 构造函数获取当前插入符位置。然后将此位置传递给 对象(从 ViewFilterCodeWindowManager 对象a> 构造函数)。如果 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。

I do not have a code example, but found the following documentation for the ViewFilter.HandleQuickInfo method which sounds like the steps you need to do.

The base method calls the GetCaretPos method on the IVsTextView object passed to the ViewFilter constructor to obtain the current caret position. This position is then passed to the OnSyncQuickInfo(IVsTextView, Int32, Int32) method on the Source object (obtained from the CodeWindowManager object in the ViewFilter constructor). If OnSyncQuickInfo(IVsTextView, Int32, Int32) returns any text, this method next calls the GetFullDataTipText method to get any additional information from the debugger if debugging is active. Finally, a new (or current) TextTipData object is used to display the tool tip.

Source: ViewFilter.HandleQuickInfo

Edit:

You can retrieve the current IVsTextView using 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));

However, I am stuck there, and unable to do anything useful with IVsTextView.UpdateTipWindow, it never calls anything on my passed dummy object, so I presume it requires an already visible IVsTipWindow from a language service.

掩耳倾听 2024-10-21 22:22:06

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

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

The Quickview shows the methods and properties that exists and are accessible on the class so one solution would be to use reflection to get this information.

//Gets the methods of the Class MyClass
MethodInfo[] methodInfos = typeof(MyClass).GetMethods(BindingFlags.Public |
BindingFlags.Static);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文