visual-studio - 如何将控件叠加到Visual Studio代码图面上

标签 visual-studio envdte

我正在使用Visual Studio可扩展性API将插件添加到Sql Server Management Studio中。我已经在将控件叠加到文本表面上取得了一些成功(我试图模仿CodeRush / Refactor操作列表,类似于智能感知组合),但是我只能基于以下属性来定位它的坐标空间:

get
{
    var point = TextDocument.Selection.TopPoint;
    return new Cursor( point.DisplayColumn, point.Line );
}


这段代码的确使我可以将cols /行转换为像素,但是当文本编辑器垂直或水平滚动时,我找不到偏移cols /行的方法。这将导致列表框消失在可见的屏幕空间下方。

我正在寻找的是一种从当前col / row对获取屏幕坐标的方法,因此无论滚动位置如何,我都可以将列表框放在光标旁边。

最佳答案

类型为TextSelection的TextDocument.Selection属性具有TextPane属性-有关更多信息,请参见here。它没有明确说明,但TextPane是屏幕上可见的部分。此外,TextPane的StartPoint属性提供了滚动文本的“偏移”。

因此,我能够通过从Selection的StartPoint中减去TextPane.StartPoint来确定偏移光标的位置:

get
{
    var start = TextDocument.Selection.TextPane.StartPoint;
    var top = TextDocument.Selection.TopPoint;
    return new Cursor( 
        top.DisplayColumn - start.DisplayColumn + 1 , 
        top.Line - start.Line + 1 
    );
}

关于visual-studio - 如何将控件叠加到Visual Studio代码图面上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1619219/

相关文章:

visual-studio-2010 - 无法在 IIS 7.5 上运行 ASP.NET MVC 2 Web 应用程序

c# - T4 使用 DTE 打开生成的文件时出现 Visual Studio 序列化错误

.net - 动态添加对同一解决方案中另一个项目的项目引用

c# - 如何以编程方式创建包含多个项目的解决方案?

c# - C# EnvDTE 将项目从解决方案移动到解决方案文件夹

visual-studio - 用于自动添加 'using' 语句的 Visual Studio 键盘快捷键

c# - 使用 Roslyn 进行面向方面的编程

c++ - 如何让我的过时代码在运行前自动构建?

.net - 使字符串在 .NET 应用程序中持久化

c# - 通过 EnvDTE 在 C# 中以编程方式添加项目引用(而不是程序集引用)