7
我正在編寫自己的Visual Studio 2010 Extension,它應該可以幫助我導航一個相當大的解決方案。
我已經有一個基於對話框的VS擴展,它顯示了一個類名和一個函數名,這取決於一些搜索條件。我現在可以點擊這個類/方法,然後我可以打開正確的文件並跳轉到該函數。
我現在想要做的是將光標置於該函數的開始位置。
我的代碼跳轉到該函數是:使用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
{
}
}
}
}
}
}
}
這裏最重要的點是window.Activate();
打開正確的文件,並classElement.StartPoint.TryToShow(vsPaneShowHow.vsPaneShowTop, null);
跳轉到正確的函數。
不幸的是,遊標未設置爲請求功能的開始。我怎樣才能做到這一點?我正在考慮像classElement.StartPoint.SetCursor()
。
乾杯西蒙
Cyclomatically複雜嗎?此外,當你找到你要找的東西時,看起來你並沒有擺脫這種方法,這可能會有一些副作用(WAG)。 – Will
@會:是的,我知道。這只是一些原型代碼。只是爲了演示我如何打開請求的類和函數... –