我正在构建一个 VSpackage 扩展来创建“VisualStudio 工具窗口”。我在工具窗口中有一个网格,由数字组成。如果用户选择网格的特定行。应该突出显示该特定代码行。
为了更清楚,假设我的网格包含:
第 1 - 10 行,第 2 - 15 行,第 3 - 14 行,
如果用户选择第 1 行,则代码窗口中的第 10 行应突出显示。使用 VisualStudio 包是否可以使用此功能。我有一种强烈的感觉,这是可能的。因为大多数搜索结果都是这样工作的。
非常感谢您的任何帮助!
我正在构建一个 VSpackage 扩展来创建“VisualStudio 工具窗口”。我在工具窗口中有一个网格,由数字组成。如果用户选择网格的特定行。应该突出显示该特定代码行。
为了更清楚,假设我的网格包含:
第 1 - 10 行,第 2 - 15 行,第 3 - 14 行,
如果用户选择第 1 行,则代码窗口中的第 10 行应突出显示。使用 VisualStudio 包是否可以使用此功能。我有一种强烈的感觉,这是可能的。因为大多数搜索结果都是这样工作的。
非常感谢您的任何帮助!
我终于根据大量谷歌搜索找到了我的帖子的答案。希望这对其他人有帮助。
您需要使用“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
{
}
}
}
}
}
}
您也可以使用更简单的解决方案;见下文
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);
}