0

我正在构建一个 VSpackage 扩展来创建“VisualStudio 工具窗口”。我在工具窗口中有一个网格,由数字组成。如果用户选择网格的特定行。应该突出显示该特定代码行。

为了更清楚,假设我的网格包含:

第 1 - 10 行,第 2 - 15 行,第 3 - 14 行,

如果用户选择第 1 行,则代码窗口中的第 10 行应突出显示。使用 VisualStudio 包是否可以使用此功能。我有一种强烈的感觉,这是可能的。因为大多数搜索结果都是这样工作的。

非常感谢您的任何帮助!

4

2 回答 2

0

我终于根据大量谷歌搜索找到了我的帖子的答案。希望这对其他人有帮助。

您需要使用“TextSelection”类来突出显示上面的代码行。

        foreach (CodeElement codeElement in projectItem.FileCodeModel.CodeElements)// search for the function to be opened
        {
            // get the namespace elements
            if (codeElement.Kind == vsCMElement.vsCMElementNamespace)
            {
                foreach (CodeElement namespaceElement in codeElement.Children)
                {
                    // get the class elements
                    if (namespaceElement.Kind == vsCMElement.vsCMElementClass || namespaceElement.Kind == vsCMElement.vsCMElementInterface)
                    {
                        foreach (CodeElement classElement in namespaceElement.Children)
                        {
                            try
                            {
                                // get the function elements to highlight methods in code window
                                if (classElement.Kind == vsCMElement.vsCMElementFunction)
                                {
                                    if (!string.IsNullOrEmpty(highlightString))
                                    {
                                        if (classElement.Name.Equals(highlightString, StringComparison.Ordinal))
                                        {
                                            classElement.StartPoint.TryToShow(vsPaneShowHow.vsPaneShowTop, null);

                        classElement.StartPoint.TryToShow(vsPaneShowHow.vsPaneShowTop, null);

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

                            // now set the cursor to the beginning of the function
                            textSelection.MoveToPoint(classElement.StartPoint);
                            textSelection.SelectLine();

                                        }
                                    }
                                }
                            }
                            catch
                            {
                            }
                        }
                    }
                }
            }
        }
于 2013-04-16T13:08:10.093 回答
0

您也可以使用更简单的解决方案;见下文

  int lineNo = 3;
  if (!isProjectItemOpen)
  {
       Window win = projectItem.Open();
       win.Visible = true;
       Document doc = win.Document;
       doc.Activate();
       var ts = dte.ActiveDocument.Selection;
       ts.GotoLine(lineNo, true);
  }
于 2014-02-08T07:44:45.937 回答