Я пишу собственное расширение 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()
.
Cheers Simon