gpt4 book ai didi

c# - Visual Studio 2012 DTE 将焦点更改为新的解决方案项

转载 作者:行者123 更新时间:2023-12-05 08:01:34 24 4
gpt4 key购买 nike

我正在尝试自动将焦点从解决方案资源管理器中的一个 .ProjectItem 更改为另一个 .ProjectItem。我想以编程方式将焦点从一个项目更改到另一个项目,但似乎不知道如何操作。
这是我到目前为止所拥有的:

dteInstance.Solution.Projects(2).ProjectItems(3).Focus  

我意识到 ProjectItem 上没有 .Focus 属性,但这是我需要做的。所以在代码中,我在解决方案中的 ProjectItem 上,我想将焦点设置到但无法单击它或找到一种方法来将焦点设置在它上面。我可以读取 .Name 等项目属性。如何将焦点设置到 .ProjectItem?
谢谢!

最佳答案

递归查询解决方案的所有 UIHierarchyItem,并找到与您的 ProjectItem 等效的确切 UIHierarchyItem。然后调用 UIHierarchyItem.Select()

UIHierarchyItem uiItem = SolutionHelper.FindHierarchyItem(dteInstance.Solution.Projects(2).ProjectItems(3));
uiItem?.Select(vsUISelectionType.vsUISelectionTypeSelect);
        private static readonly EnvDTE80.DTE2 _applicationObject = 
(EnvDTE80.DTE2)ServiceProvider.GlobalProvider.GetService(typeof(Microsoft.VisualStudio.Shell.Interop.SDTE));

public static UIHierarchy SolutionExplorerNode
{
get
{
return _applicationObject.ToolWindows.SolutionExplorer;
}
}

public static UIHierarchyItem FindHierarchyItem(object item)
{
ThreadHelper.ThrowIfNotOnUIThread();
UIHierarchyItems items = SolutionExplorerNode.UIHierarchyItems.Item(1).UIHierarchyItems;
Stack s = new Stack();
CreateItemsStack(s, item);

UIHierarchyItem last = null;
while (s.Count != 0)
{
object o = s.Pop();

last = null;
foreach (UIHierarchyItem child in items)
{
if (child.Object == o)
{
last = child;
items = child.UIHierarchyItems;
break;
}
}
}

return last;
}

private static void CreateItemsStack(Stack s, object item)
{
ThreadHelper.ThrowIfNotOnUIThread();
if (item is ProjectItem)
{
ProjectItem pi = (ProjectItem)item;
s.Push(pi);
CreateItemsStack(s, pi.Collection.Parent);
}
else if (item is Project)
{
Project p = (Project)item;
s.Push(p);
if (p.ParentProjectItem != null)
{
CreateItemsStack(s, p.ParentProjectItem);
}
}
}

关于c# - Visual Studio 2012 DTE 将焦点更改为新的解决方案项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12993960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com