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
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
@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 ... –