7

Oldukça geniş bir çözümde gezinmeme yardımcı olacak kendi Visual Studio 2010 Uzantımı yazıyorum.
Zaten bazı arama kriterlerine bağlı olarak bana bir sınıf adı ve işlev adı gösteren bir VS uzantısı tabanlı bir iletişim kutusu var. Şimdi bu sınıfa/yönteme tıklayabilirim ve daha sonra doğru dosyayı açabilir ve işleve atlayabilirim.
Şimdi yapmak istediğim, imleci bu işlevin başında ayarlamaktır. işlevine atlamak için
Benim kodudur: BuradaVisual Studio Uzantısı ile imleç konumunu ayarlama

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 
         { 
         } 
        } 
       } 
      } 
     } 
    } 
} 

önemli nokta doğru dosyayı açmaya ve classElement.StartPoint.TryToShow(vsPaneShowHow.vsPaneShowTop, null); doğru işlevine atlamak için window.Activate(); bulunmaktadır.
Maalesef, imleç istenen işlevin başlangıcına ayarlanmamış. Bunu nasıl yapabilirim? classElement.StartPoint.SetCursor() gibi bir şey düşünüyorum.
Alkış Simon

+0

Cyclomatically kompleksi? Ayrıca, aradığınız şeyi bulduğunuzda, bazı yan etkilere (WAG) sahip olabilecekleri yöntemden kurtulmamanız gibi görünüyor. – Will

+0

@Will: Evet, biliyorum. Bu sadece bir çeşit prototip kodudur. İstenen sınıfı ve işlevi nasıl açtığımı göstermek için ... –

cevap

12

nihayet aldım ...
Sadece sizin yöntemini MoveToPoint var TextSelection arayüzü kullanmak zorunda.
Yani yukarıdan kod artık geçerli:

// 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);