使用 Visual Studio 扩展设置光标位置

2023-12-31

我正在编写自己的 Visual Studio 2010 扩展,它应该可以帮助我浏览一个相当大的解决方案。
我已经有一个基于对话框的 VS 扩展,它根据某些搜索条件显示类名和函数名。我现在可以单击此类/方法,然后我就可以打开正确的文件并跳转到该函数。
我现在想做的是将光标设置在该函数的开头。
我跳转到该函数的代码是:

Solution currentSolution = ((EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.10.0")).Solution;
ProjectItem requestedItem = GetRequestedProjectItemToOpen(currentSolution.Projects, "fileToBeOpened");
if (requestedItem != null)
{
    // open the document
    Window window = requestedItem.Open(Constants.vsViewKindCode);
    window.Activate();

    // search for the function to be opened
    foreach (CodeElement codeElement in requestedItem.FileCodeModel.CodeElements)
    {
        // get the namespace elements
        if (codeElement.Kind == vsCMElement.vsCMElementNamespace)
        {
            foreach (CodeElement namespaceElement in codeElement.Children)
            {
                // get the class elements
                if (namespaceElement.Kind == vsCMElement.vsCMElementClass)
                {
                   foreach (CodeElement classElement in namespaceElement.Children)
                   {
                       try
                       {
                           // get the function elements
                           if (classElement.Kind == vsCMElement.vsCMElementFunction)
                           {
                               if (classElement.Name.Equals("functionToBeOpened", StringComparison.Ordinal))
                               {
                                   classElement.StartPoint.TryToShow(vsPaneShowHow.vsPaneShowTop, null);
                                   this.Close();
                               }
                           }
                       }
                       catch
                       {
                       }
                   }
               }
           }
       }
   }
}

这里的重点是window.Activate();打开正确的文件并classElement.StartPoint.TryToShow(vsPaneShowHow.vsPaneShowTop, null);跳转到正确的函数。
不幸的是,光标没有设置到所请求函数的开头。我怎样才能做到这一点?我在想类似的事情classElement.StartPoint.SetCursor().
干杯西蒙


我终于明白了...
你只需要使用TextSelection你有方法的接口MoveToPoint.
所以上面的代码现在是:

// open the file in a VS code window and activate the pane
Window window = requestedItem.Open(Constants.vsViewKindCode);
window.Activate();

// get the function element and show it
CodeElement function = CodeElementSearcher.GetFunction(requestedItem, myFunctionName);

// get the text of the document
TextSelection textSelection = window.Document.Selection as TextSelection;

// now set the cursor to the beginning of the function
textSelection.MoveToPoint(function.StartPoint);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Visual Studio 扩展设置光标位置 的相关文章

  • 检查两个数是否是彼此的排列?

    给定两个数字 a b 使得 1 例如 123 是 312 的有效排列 我也不想对数字中的数字进行排序 如果您指的是数字的字符 例如 1927 和 9721 则 至少 有几种方法 如果允许排序 一种方法是简单地sprintf将它们放入两个缓冲
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • Json.NET - 反序列化接口属性引发错误“类型是接口或抽象类,无法实例化”

    我有一个类 其属性是接口 public class Foo public int Number get set public ISomething Thing get set 尝试反序列化Foo使用 Json NET 的类给我一条错误消息
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • 如何将图像路径保存到Live Tile的WP8本地文件夹

    我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API 本地文件夹 而不是 WP7 API 隔离存储文件 旧的工作方法 这是我如何成功地将图像保存到 共享 ShellContent文件夹使用隔离存储文件方法
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke

随机推荐

  • 通过 Dagger 将演示者注入到 Activity 中

    我想知道如何使用代码在 Activity 中注入 Presenter 以下是详细信息 以下是错误信息 Error 12 46 error cannot find symbol class DaggerCategoryPresenterCom
  • 为什么 Twitter 和 Google API 文档不对 URL 中的 & 符号进行编码?

    I 已读过 https stackoverflow com questions 3705591 do i encode ampersands in a href我应该将我的 符号编码为 amp 在 HTML 中 然而numerous来自受人
  • 如何使用 Eclipse (CDT) 将现有项目用作新项目的模板?

    我想使用我的一个项目 其中所有内容都配置良好 以及如何开始作为 模板 工作 以便使用 CDT 在 eclipse 中创建新项目 因此可以节省配置和编写工作项目的时间 因为它已经在其他地方制作了 有什么提示吗 您始终可以右键单击该项目 选择
  • 在 React Native 中将 props 传递到外部样式表?

    我是 React 和 React Native 的新手 目前 对于每个组件 我将代码分成两个单独的文件 index js对于所有 React 代码 以及 styles js对于样式表 有没有办法将 props 传递到外部样式表中 例子 in
  • 与重复的组合

    我正在使用 Mathematica 7 和 Combinatorica 包函数 我可以从元素列表中获取特定数量的所有组合 其中顺序无关紧要并且没有重复 例如 in KSubsets a b c d 3 out a b c a b d a c
  • 如何检查仅当鼠标位于特定位置时才存在的元素

    如果您需要检查元素的悬停状态 可以按照描述完成here https stackoverflow com questions 17602611 inspect a hover element问题是如果移动鼠标就会失去状态 就我而言 它的 ja
  • 绑定Vuejs的两个组件

    如何完美地组织两个 vuejs 组件之间的数据和交互 例如 1 我有一个组件 item v for item in items a item name 2 和第二个 card v for item in items div content
  • 如何停靠弹出窗口?

    我有一个包含 3 个主要小部件的应用程序 我也有一个弹出窗口QDockWidget 我正在尝试获取QDockWidget停靠到底部小部件的右半部分 但正如您在下图中看到的 我可以停靠窗口的唯一位置是应用程序的边缘 我怎样才能做到这一点QDo
  • 闪亮的传单地图弹出窗口正在提取错误的数据

    由于某种原因 Shiny传单应用程序上分配给多边形的弹出窗口提取了应分配给多边形的错误信息 似乎多边形已放置在地图上 然后以不同的顺序分配多边形属性 任何想法将不胜感激 server lt function input output ses
  • Google Cloud Load Balancer - 子域重定向到存储桶中的特定文件夹

    目前我们有以下需求 每个用户都可以在 Google 存储桶下拥有自己的子域和文件夹 其中包含应通过此子域提供的内容 例如 domain user1 example com gt bucket example com user1 index
  • 如何将表中的某些列复制到另一个mysql

    我有两张桌子 例如 table 1 A B C D E F G H I J table 2 A C D E G H J K L M N O P 我必须将一些列从表 2 复制到表 1 我尝试的是 INSERT INTO table 1 C D
  • json_encode PHP 对象及其受保护的属性

    有什么方法可以设置 PHP 对象 以便当我尝试将它们转换为 JSON 时 它们所有受保护的属性都会显示出来 我读过其他答案建议我添加一个toJson 函数到对象 但这可能并不能真正帮助我很多 在大多数情况下 我有一个对象数组 并对数组本身执
  • 在 Windows 窗体上的窗口一侧添加按钮

    我想在 C 上的 Windows 窗体一侧添加按钮 在外面 当窗口移动时 按钮应该一起移动 例如 我看到两个选择 要么将按钮放在单独的表单中 然后通过编码将两个表单粘在一起Move有可能Resize events 或者更简单 制作表格透明的
  • 在新行中添加 max(value)+1,这会是一个问题吗?

    在 SQL Server 表中 我有以下两列 RowId 主键 数字 标识列和自动插入 MailId 非键 数字 非标识 非自动插入 邮件 ID 可以重复 如果是新的 MailId 我将检查 max MailId 1 并将其插入新行中 如果
  • 如何在gridview中间歇性地展示横幅广告

    I am developing an android app that will have a screen similar to the following image 请注意单元格之间的横幅广告 由于 GridView 不支持这种跨列
  • 为什么在 epoll 中推荐使用非阻塞套接字

    我正在尝试学习如何将 epoll 用于 tcp 服务器应用程序 因为我期望有很多连接 我尝试检查示例和教程 他们总是建议使用 设置在 epoll 中添加的套接字为非阻塞套接字 为什么 对于级别触发的 epoll 非阻塞套接字可以帮助最大限度
  • C# Groupby 然后在分割 CSV 后求和(无标题)

    阅读了各种帖子后 我认为我已经接近得到我想要的结果 但 总和 部分给出了错误的答案 我怀疑这是由于我调用 总和 的方式造成的 因为我的 csv 文件没有列标题 csv 文件包含以下内容 222 1 223 2 222 1 224 2 222
  • 偏移GPS坐标的公式/算法

    我以纬度 经度的形式提供 GPS 坐标 并希望将它们偏移距离和角度 例如 如果我偏移 新坐标是多少45 12345 7 34567沿方位 104 度行驶 22 公里 Thanks 对于大多数应用 这两个公式之一就足够了 给定径向和距离的纬度
  • 收到错误 /bin/sh: 1: 源: 未找到

    我正在尝试构建 docker 并安装 nvm 一些代码行 RUN curl https raw githubusercontent com creationix nvm v0 25 0 install sh bash RUN source
  • 使用 Visual Studio 扩展设置光标位置

    我正在编写自己的 Visual Studio 2010 扩展 它应该可以帮助我浏览一个相当大的解决方案 我已经有一个基于对话框的 VS 扩展 它根据某些搜索条件显示类名和函数名 我现在可以单击此类 方法 然后我就可以打开正确的文件并跳转到该