ソリューションエクスプローラを全て折りたたむマクロ
- Visual Studioのメニューバーから[ツール] - [マクロ] - [マクロ IDE]を選択
- マクロ IDEのプロジェクトエクスプローラーでプロジェクトを選択してメニューバーから[ファイル] - [新しい項目の追加]を選択
- 新しい項目の追加ダイアログでモジュールを選択して開く
- 以下のソースをモジュールに記述
- 実行する際はメニューバーから [ツール] - [マクロ] - [マクロエクスプローラー]を選択して実行する
' ソリューションTree内のプロジェクトをすべて折りたたむ
Sub CollapseAllProject()
' ソリューションエクスプローラーオブジェクトを取得
Dim solutionExplorer As UIHierarchy = DTE.Windows.Item(Constants.vsext_wk_SProjectWindow).Object()
' ソリューション以下の階層アイテムがなければスルー
If (solutionExplorer.UIHierarchyItems.Count = 0) Then
Return
End If
' ルートノードを取得。操作中断。
Dim rootNode As UIHierarchyItem = solutionExplorer.UIHierarchyItems.Item(1)
rootNode.DTE.SuppressUI = True
' すべてのプロジェクトをたたむ。再帰。
CollapseProject(rootNode, solutionExplorer)
' ルートノードを選択。
' ドキュメント選択時にソリューションTreeを同期する設定に。
rootNode.Select(vsUISelectionType.vsUISelectionTypeSelect)
' 操作再開。
rootNode.DTE.SuppressUI = False
End Sub
' ノード内にあるプロジェクトを折りたたむ
Private Sub CollapseProject(ByVal item As UIHierarchyItem, ByRef solutionExplorer As UIHierarchy)
' 対象ノードの子ノードを対象。
For Each innerItem As UIHierarchyItem In item.UIHierarchyItems
If innerItem.UIHierarchyItems.Count > 0 Then
' 下の子がいれば再帰
CollapseProject(innerItem, solutionExplorer)
' 折りたたむ
If innerItem.UIHierarchyItems.Expanded Then
innerItem.UIHierarchyItems.Expanded = False
If innerItem.UIHierarchyItems.Expanded = True Then
' VisualStudio2005のバグ用
innerItem.Select(vsUISelectionType.vsUISelectionTypeSelect)
solutionExplorer.DoDefaultAction()
End If
End If
End If
Next
End Sub