次の方法で共有


方法 : UIHierarchy を使用してツリー ビューを操作する

Visual Studio アドインは、Visual Studio 2013 では使用されなくなりました。 アドインを VSPackage 拡張機能にアップグレードしてください。 アップグレードの詳細については、「FAQ: アドインを VSPackage 拡張に変換する」を参照してください。

ソリューション エクスプローラーなど、Visual Studio の一部のツール ウィンドウには、その内容を操作するために使用できる明示的なオートメーション オブジェクトがありません。 ただし、これらのツール ウィンドウには、ツリー ビュー (階層構造でアウトラインを示すノードのビュー) があります。このビューには、プログラムでアクセスできます。 UIHierarchy オブジェクトは、このようなツール ウィンドウのツリー ビューを表します。また、このオブジェクトにより、ツリー ビューを反復処理し、ノードの内容を表示できます。

オブジェクト名

説明

UIHierarchy オブジェクト

指定したツール ウィンドウにあるツリー ビューを表します。

UIHierarchyItems コレクション

ツリー ビューにあるすべてのノードを表します。

UIHierarchyItem オブジェクト

ツリー ビューにある単一のノードを表します。

これらのオブジェクトとコレクションを使用して、次の操作を行うことができます。

  • ツリー ビューで (1 つまたは多数の) ノードを選択して表示します。

  • ツリー ビュー内でカーソル位置を上下に移動します。

  • 選択した項目の値を返すか、選択した項目の既定のアクションが実行されます。

ToolWindows オブジェクト (ToolWindows からも返される) を使用すると、Visual Studio のさまざまなツール ウィンドウを簡単に参照できます。 たとえば、現在は、_applicationObject.Windows.Item(EnvDTE.Constants.vsWindowKindOutput) ではなく、_applicationObject.ToolWindows.OutputWindow を使用できます。

注意

実際に画面に表示されるダイアログ ボックスとメニュー コマンドは、アクティブな設定またはエディションによっては、ヘルプの説明と異なる場合があります。ここに記載されている手順は、全般的な開発設定が適用されているものとして記述されています。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio での開発設定のカスタマイズ」を参照してください。

使用例

UIHierarchy オブジェクトは、ソリューション エクスプローラーなど、ツリー ビューを持つほとんどのツール ウィンドウの内容を表しますが、ツール ウィンドウ自体は Window オブジェクトのままです。 UIHierarchyItems プロパティは、指定したツール ウィンドウのトップレベル ノードのコレクションを返します。 ソリューション エクスプローラーには、単一のトップレベル ノード (ソリューション) だけが表示されます。 その結果、この特定のウィンドウのプロジェクト ノードは、ウィンドウの UIHierarchyItems コレクションではなく、トップレベル ノードのコレクションに含まれます。

この点を考慮に入れると、ツリー ビュー内の特定のノード (UIHierarchyItem) にアクセスするには次の 2 つの方法が考えられます。

  • GetItem メソッドを使用し、ソリューション/プロジェクト/項目というパターンを使用して目的のノードを直接参照します。

  • UIHierarchyItems.Item.UIHierarchyItems... (コレクション/アイテム/コレクションというパターン) を使用します。

    深い階層にあるノードに移動する場合は、このパターンを繰り返します。 たとえば、トップレベル ノードの下位にあるノードに移動するには、UIHierarchy.UIHierarchyItems.Item(1).UIHierarchyItems.Item(2) を使用します。

この 2 つの方法を使用して下位のノードにアクセスする方法の例を次に示します。

これらのアドインの例では、UIHierarchy オートメーション モデルのさまざまなメンバーを参照および使用し、ソリューション エクスプローラー内のすべての項目の一覧を表示する方法について説明します。

最初の例では、GetItem メソッドを使用して、ソリューション エクスプローラー内の [References] ノードの内容にアクセスします。 アドイン コードの実行方法の詳細については、「方法 : オートメーション オブジェクト モデルのコード例をコンパイルおよび実行する」を参照してください。

注意

ソリューション エクスプローラーの例では、メッセージ ボックスにデータを送信します。

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

参照

処理手順

方法 : ソリューション エクスプローラーを制御する

方法 : ウィンドウの特性を変更する

概念

オートメーション オブジェクト モデルの階層図

その他の技術情報

環境ウィンドウの作成と制御

アドインおよびウィザードの作成

オートメーションと機能拡張のリファレンス