如何获取 EnvDte.ActiveDocument 的 IWpfTextView?

2023-12-19

我正在尝试操纵 Visual Studio 文本编辑器滚动条值。问题是我只有 dte.ActiveDocument 并且无法从那里执行此操作。

当 VS 启动并且我捕获 dte.Events.CommandEvents 时,我的扩展仅加载一次。有时我想更改 ActiveDocument 的滚动条值。为此,我需要 IWpfTextView 或 ITextView。您知道如何获取该对象的实例吗?

internal class MyExtension
    {
        private CommandEvents commandEvents;

        private DTE dte;

        public MyExtension(DTE dte)
        {
            this.dte = dte;
            commandEvents = dte.Events.CommandEvents;
            commandEvents.BeforeExecute += commandEvents_BeforeExecute;
        }

        void commandEvents_BeforeExecute(string Guid, int ID, object CustomIn, object CustomOut, ref bool CancelDefault)
        {
            var doc = dte.ActiveDocument
            // CHANGE SCROLLBAR VALUES HERE
        }
    }

我找到了一种方法来做到这一点。在扩展的主类中我得到 SVsTextManager

public sealed class MyExtensionPackage : Package
{
    protected override void Initialize()
    {
        DTE dte = (DTE)base.GetService(typeof(DTE));
        var txtMgr = (IVsTextManager)base.GetService(typeof(SVsTextManager));
        plugin = new MyExtension(dte, txtMgr);
        base.Initialize();
    }
}

internal class MyExtension
    {
        private CommandEvents commandEvents;

        private DTE dte;
        private IVsTextManager txtMngr;

        public MyExtension(DTE dte, IVsTextManager txtMngr)
        {
            this.txtMngr = txtMngr;
            this.dte = dte;
            commandEvents = dte.Events.CommandEvents;
            commandEvents.BeforeExecute += commandEvents_BeforeExecute;
        }

        void commandEvents_BeforeExecute(string Guid, int ID, object CustomIn, object CustomOut, ref bool CancelDefault)
        {
            var doc = dte.ActiveDocument

            IVsTextView textViewCurrent;
            txtMngr.GetActiveView(1, null, out textViewCurrent);
            int a, b, c, verticalScrollPosition;

            var scrollInfo = textViewCurrent.GetScrollInfo(1, out a, out b, out c, out verticalScrollPosition);
            textViewCurrent.SetScrollPosition(1, verticalScrollPosition);
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取 EnvDte.ActiveDocument 的 IWpfTextView? 的相关文章

  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • 如何访问另一个窗体上的ListView控件

    当单击与 ListView 所在表单不同的表单中的按钮时 我试图填充 ListView 我在 Form1 中创建了一个方法以在 Form2 中使用 并将参数传递给 Form1 中的方法 然后填充 ListView 当我调试时 我得到了传递的
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 私有模板函数

    我有一堂课 C h class C private template
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • HttpWebRequest 在第二次调用时超时

    为什么以下代码在第二次 及后续 运行时超时 代码挂在 using Stream objStream request GetResponse GetResponseStream 然后引发 WebException 表示请求已超时 我已经尝试过
  • 如何对 Web Api 操作进行后调用?

    我创建了一个 Web API 操作 如下所示 HttpPost public void Load string siteName string providerName UserDetails userDetails implementat
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • 集成测试私有类和方法

    对于单元测试 您不应该测试私有方法 是的 但是对于集成测试 使用 MSTest 或 NUnit 等单元测试框架 我非常希望针对测试 url 运行内部 API 调用 以确保当前代码当第三方 API 供应商更改其后端时有效 考虑到系统的复杂性
  • 替代 sql server 2008 中的 First_Value()

    我有以下查询 它在 Oracle 和 DB2 中运行良好 但它在 SQL Server 2008 中不起作用 因为 First Value 函数不可用于相同的 2008年有解决办法吗 select NameGuid Name Ancesto
  • 如何选择 select2 JavaScript 多选中的所有选项

    有一天 我试图弄清楚如何选择 select2 v3 5 1 JavaScript 多选控件中的所有项目 我尝试了一些事情 但我很难弄清楚如何去做 我只想选择框中的每个选项 但显然 select2 没有内置选项来为您选择所有项目 对于 sel
  • 使用 MVC 的多表模型?

    我刚刚开始使用 MVC 一旦我设法将想法转向它 这似乎将是一个很好的方法 我遇到的大多数材料似乎在模型 视图和表之间具有 1 1 的关系 即每个模型代表一个表并允许 CRUD 以及更复杂的功能 如果我有一个允许帐户创建和更新的帐户模型怎么办
  • STATHREAD 和主线程

    我不完全理解 STATHREAD 属性的作用http msdn microsoft com en us library system stathreadattribute aspx http msdn microsoft com en us
  • 哪些技术最适合我的应用程序:Struts 与 Hibernate 或 Spring 与 Hibernate

    我有 Struts2 和 Spring 的工作知识 我想开发一个管理多个公司信息的应用程序 我完全不知道什么技术最适合我的应用程序 例如 Struts2 Hibernate MVC 和 Spring 有人可以帮助我选择合适的技术吗 以下是您
  • 空的“期望:”标题有什么意义吗?

    许多图书馆包括Expect 100 continue默认情况下 在所有 HTTP 1 1 POST 和 PUT 请求上 我打算通过在客户端上删除那些请求的 100 Continue 机制来减少感知延迟 对于这些请求 我知道立即发送数据的费用
  • 文件作为 argparse 的命令行参数 - 如果参数无效,则出现错误消息

    我目前正在使用 argparse 如下所示 import argparse from argparse import ArgumentParser parser ArgumentParser description ikjMatrix mu
  • 角度服务单元测试 DoneFn

    我正在关注 Angular 官方文档 我可以看到以下代码 it getObservableValue should return value from observable done DoneFn gt service getObserva
  • Console.ReadKey();和 Switch 语句 - 使用字母

    我正在尝试用 C 编写一个程序 该程序基本上通过使用 Console ReadKey 来根据用户按下的键 例如 X 退出 D 断开等 运行 在 c 中 我遇到的问题是如何在 Switch 语句中使用 ReadKey 信息 有人可以帮忙吗 代
  • Django没有这样的表:删除迁移和数据库后的django_site

    我尝试更改应用程序名称 这不起作用 所以我尝试将其改回来 这也不起作用 我删除了所有迁移和我的 db sqlite 现在每当我尝试makemigrations or migrate我收到此错误 django db utils Operati
  • CMake 生成器表达式未被评估

    由于出现以下警告 CMake Error at test CMakeLists txt 29 get target property The LOCATION property may not be read from target my
  • 使用 grunt-sass 编译 node-sass 时,出现错误“致命错误:“原始”参数必须是函数类型。”

    这是我在 gruntfile 中的 sass 声明 sass dist options implementation node sass style expanded noCache true files dist css jk css s
  • 如何等待 Indy 线程池中的所有线程完成

    我正在使用 Delphi xe 5 作为一个应用程序 该应用程序使用 Indy 来管理我的服务器应用程序 每个客户端连接都有自己的会话 这是完美的 现在我需要在这些会话之一中以异步方式执行多项任务 当所有这些任务完成后 控制权可以返回给调用
  • 自动刷新令牌并添加新的用户安全组 Azure AD

    我有一个简单的 ASP Net Web APP 使用 Azure AD 和角色 声明身份验证 授权 基本上 应用程序会检查用户的 IsinRole 然后根据返回的内容 他可以访问网络应用程序的区域 我们在 Azure AD 中使用安全组 这
  • 如何自动从“云”服务器发送打印作业到打印机?

    一张图片应该值 1000 个字 所以让我们看看这是否可以缩短这篇文章的长度 本质上 我正在研究 如何 编写一个在云中的 Web 服务器上运行的解决方案将向办公室 1 内的打印机 标签打印机 发送打印命令 打印作业实际上是 ASP NET W
  • CloudFront -> S3 用于静态或 API 网关,在 ECS 中具有多个动态后端

    我需要为站点实现反向代理 重定向服务 该服务将托管在 AWS S3 静态 JS 资产 CloudFront 中 并且多个后端作为不同的任务运行 AWS ECS 位于domain com api session number重定向或反向代理服
  • 如何将 JLabel.getIcon() 转换为 BufferedImage

    我有一个仅包含一个图标的 JLabel 我可以使用 label1 getIcon 获取该图标 但我不知道如何将该图标转换为 BufferedImage 仅供参考 我不是在谈论 ImageIcon 只是在谈论 Icon 另外 我也看到过这个问
  • 在数据库列中存储分隔列表真的那么糟糕吗?

    想象一个带有一组复选框的 Web 表单 可以选择其中任何一个或全部 我选择将它们保存在存储在数据库表的一列中的逗号分隔值列表中 现在 我知道正确的解决方案是创建第二个表并正确规范化数据库 实现简单的解决方案速度更快 我希望快速获得该应用程序
  • 如何获取 EnvDte.ActiveDocument 的 IWpfTextView?

    我正在尝试操纵 Visual Studio 文本编辑器滚动条值 问题是我只有 dte ActiveDocument 并且无法从那里执行此操作 当 VS 启动并且我捕获 dte Events CommandEvents 时 我的扩展仅加载一次