Estoy escribiendo mi propia extensión de Visual Studio 2010 que me debería ayudar a navegar una solución bastante grande.
Ya tengo una extensión VS basada en diálogo que me muestra un nombre de clase y un nombre de función dependiendo de algunos criterios de búsqueda. Ahora puedo hacer clic en esta clase/método y luego ya puedo abrir el archivo correcto y saltar a la función.
Lo que ahora quiero hacer es colocar el cursor al inicio de esa función.
Mi código para saltar a la función es:Configuración de la posición del cursor con Visual Studio Extension
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
{
}
}
}
}
}
}
}
Los puntos importantes aquí son window.Activate();
para abrir el archivo correcto y classElement.StartPoint.TryToShow(vsPaneShowHow.vsPaneShowTop, null);
para saltar a la función correcta.
Desafortunadamente, el cursor no está configurado para el inicio de la función solicitada. ¿Cómo puedo hacer esto? Estoy pensando en algo como classElement.StartPoint.SetCursor()
.
Saludos Simon
complejo Cyclomatically? Además, parece que no estás abandonando el método cuando encuentras lo que estás buscando, que podría tener algunos efectos secundarios (WAG). – Will
@Will: Sí, lo sé. Este es solo un tipo de código de prototipo. Solo por demostrar cómo abro la clase y la función solicitadas ... –