Share via


방법: UIHierarchy를 사용하여 트리 뷰 조작

Visual Studio의 추가 기능은 Visual Studio 2013에서 사용되지 않습니다. 추가 기능을 VSPackage 확장으로 업그레이드하는 것이 좋습니다. 업그레이드에 대한 자세한 내용은 FAQ: VSPackage 확장으로 추가 기능 변환 을 참조하십시오.

솔루션 탐색기와 같은 Visual Studio 에 있는 일부 도구 창에는, 도구 창에 포함된 내용을 조작하는 데 사용할 수 있는 명시적 자동화 개체가 없습니다. 그러나 이러한 도구 창에는 프로그래밍 방식으로 액세스할 수 있는 개요 스타일의 계층적 노드 뷰인 트리 뷰가 있습니다. UIHierarchy 개체는 이러한 도구 창의 트리 뷰를 나타냅니다. 이 개체를 사용하여 트리 뷰를 반복하며 노드의 내용을 볼 수 있습니다.

개체 이름

설명

UIHierarchy 개체

지정된 도구 창의 트리 뷰를 나타냅니다.

UIHierarchyItems 컬렉션

트리 뷰의 모든 노드를 나타냅니다.

UIHierarchyItem 개체

트리 뷰의 단일 노드를 나타냅니다.

이러한 개체 및 컬렉션을 사용하여 다음 작업을 수행할 수 있습니다.

  • 트리 뷰에서 하나 또는 여러 개의 노드 선택 및 보기

  • 트리 뷰에서 삽입 지점을 위아래로 이동

  • 선택된 항목의 값을 반환하거나 기본 동작을 수행하도록 지정

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

참고 항목

작업

방법: 솔루션 탐색기 제어

방법: 창 특성 변경

개념

자동화 개체 모델 차트

기타 리소스

환경 창 만들기 및 제어

추가 기능 및 마법사 만들기

자동화 및 확장성 참조