방법: UIHierarchy를 사용하여 트리 뷰 조작
일부 도구에서 Visual Studio, 등의 솔루션 탐색기, 내용을 조작 하는 데 사용할 수 있는 명시적 자동화 개체가 없습니다.그러나 이러한 도구 창에는 프로그래밍 방식으로 액세스할 수 있는 개요 스타일의 계층적 노드 뷰인 트리 뷰가 있습니다.UIHierarchy 개체는 이러한 도구 창의 트리 뷰를 나타냅니다. 이 개체를 사용하여 트리 뷰를 반복하며 노드의 내용을 볼 수 있습니다.
개체 이름 |
설명 |
---|---|
UIHierarchy 개체 |
지정된 도구 창의 트리 뷰를 나타냅니다. |
UIHierarchyItems 컬렉션 |
트리 뷰의 모든 노드를 나타냅니다. |
트리 뷰의 단일 노드를 나타냅니다. |
이러한 개체 및 컬렉션을 사용하여 다음 작업을 수행할 수 있습니다.
트리 뷰에서 하나 또는 여러 개의 노드 선택 및 보기
트리 뷰에서 삽입 지점을 위아래로 이동
선택된 항목의 값을 반환하거나 기본 동작을 수행하도록 지정
ToolWindows 개체 (에서 반환 ToolWindows)에서 다양 한 도구 창을 쉽게 참조할 수 있습니다 Visual Studio.예를 들어, _applicationObject.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)을 사용하는 대신 _applicationObject.ToolWindows.OutputWindow를 사용할 수 있습니다.
[!참고]
표시되는 대화 상자와 메뉴 명령은 활성 설정이나 버전에 따라 도움말에서 설명하는 것과 다를 수 있습니다.이러한 절차는 일반 개발 설정을 사용하여 개발되었습니다.설정을 변경하려면 도구 메뉴에서 설정 가져오기 및 내보내기를 선택합니다.자세한 내용은 Visual Studio 설정을 참조하십시오.
예제
하지만 UIHierarchy 개체를 나타내는 트리 뷰를 가진 거의 모든 도구 창의 내용을 솔루션 탐색기, 도구 창 자체는 여전히입니다는 Window 개체.UIHierarchyItems 속성은 지정된 도구 창의 최상위 노드 컬렉션을 반환합니다.솔루션 탐색기에는 최상위 노드(솔루션)가 하나만 있습니다.이 특정 창의 프로젝트 노드는 창의 아니라 최상위 노드의 컬렉션에에 따라서입니다 UIHierarchyItems 컬렉션입니다.
이 사실을 염두에 두고 다음과 같은 두 가지 방법으로 트리 뷰에서 특정 노드(UIHierarchyItem)에 액세스할 수 있습니다.
GetItem 메서드에서 솔루션/프로젝트/항목 패턴을 사용하여 원하는 노드를 직접 참조
UIHierarchyItems.Item.UIHierarchyItems... 사용(컬렉션/항목/컬렉션 패턴)
이 패턴을 반복하면 중첩 노드의 세부 수준으로 탐색할 수 있습니다.예를 들어, 최상위 노드에 종속된 노드로 이동하려면 UIHierarchy.UIHierarchyItems.Item(1).UIHierarchyItems.Item(2)을 사용합니다.
아래 예제에서는 이 두 가지 방법을 사용하여 하위 수준의 노드에 액세스하는 방법을 보여 줍니다.
이러한 추가 기능 참조의 다양 한 멤버를 사용 하는 방법을 보여 주는 예제에는 UIHierarchy 자동화 모델에서 항목을 모두 목록으로 솔루션 탐색기.
첫 번째 예제에서는 GetItem 메서드를 사용하여 솔루션 탐색기에서 참조 노드의 내용에 액세스합니다.추가 기능 코드를 실행하는 방법에 대한 내용은 방법: 자동화 개체 모델 코드의 예제 컴파일 및 실행을 참조하십시오.
[!참고]
예를 들어 솔루션 탐색기 를 메시지 상자에 해당 데이터를 보냅니다.
Imports System.Text
Public Sub OnConnection(ByVal application As Object, ByVal _
connectMode As ext_ConnectMode, ByVal addInInst As Object, _
ByRef custom As Array) Implements IDTExtensibility2.OnConnection
_applicationObject = CType(application, DTE2)
_addInInstance = CType(addInInst, AddIn)
listSlnExpNodes(_applicationObject)
End Sub
Sub listSlnExpNodes(dte as DTE2)
' Requires reference to System.Text for StringBuilder.
Dim UIH As UIHierarchy = dte.ToolWindows.SolutionExplorer
' Set a reference to the first level nodes in Solution Explorer.
' Automation collections are one-based.
Dim UIHItem As UIHierarchyItem = _
UIH.GetItem("MyAddin1\MyAddin1\References")
Dim file As UIHierarchyItem
Dim sb As New StringBuilder
' Iterate through first level nodes.
For Each file In UIHItem.UIHierarchyItems
sb.AppendLine(file.Name)
' Iterate through second level nodes (if they exist).
Dim subitem As UIHierarchyItem
For Each subitem In file.UIHierarchyItems
sb.AppendLine(" " & subitem.Name)
Next
Next
MsgBox(sb.ToString)
End Sub
using System.Text;
public void OnConnection(object application, ext_ConnectMode _
connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
listSlnExpNodes(_applicationObject);
}
public void listSlnExpNodes(DTE2 dte)
{
// Requires reference to System.Text for StringBuilder.
UIHierarchy UIH = dte.ToolWindows.SolutionExplorer;
// Set a reference to the first level nodes in Solution Explorer.
// Automation collections are one-based.
UIHierarchyItem UIHItem =
UIH.GetItem("MyAddin1\\MyAddin1\\References");
StringBuilder sb = new StringBuilder();
// Iterate through first level nodes.
foreach ( UIHierarchyItem file in UIHItem.UIHierarchyItems )
{
sb.AppendLine(file.Name);
// Iterate through second level nodes (if they exist).
foreach ( UIHierarchyItem subitem in file.UIHierarchyItems )
{
sb.AppendLine(" "+subitem.Name);
}
}
MessageBox.Show(sb.ToString());
}
다음 예제에서는 사용 하는 방법을 보여 줍니다. UIHierarchy 의 트리 뷰 내용을 나열 하는 솔루션 탐색기 창.
Sub cvTreeView()
Dim uih As UIHierarchy = DTE.ToolWindows.SolutionExplorer
Dim uihItem As UIHierarchyItem
Dim uihItems As UIHierarchyItems = uih.UIHierarchyItems
Dim msg As String
For Each uihItem In uihItems
msg += uihItem.Name & vbCr
Next
MsgBox(msg)
End Sub