次の方法で共有


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

コンテンツを操作するために使用できるに 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

参照

処理手順

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

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

概念

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

その他の技術情報

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

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

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