忍者ブログ
  C#   マクロ   Notepad++
04
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ソリューション内のプロジェクトとかフォルダーが
何階層にもなっていると、幾重にも展開されたプロジェクトやらフォルダーやら、
あーもうー的に縦広がり横広がりに耐えかね耐えかねました。

折りたたむマクロを作ろうと作ってみたのですが、
プロジェクトは折りたためれども、
フォルダー以下を折りたたむのがわからず。

調べたところまさにドン・ピシャリなのを作っている人が
いらっしゃいました。



「Useful Visual Studio Macros」
http://tomfaust.blogspot.com/2008/05/useful-vs2008-macros.html

自分なりに解釈したコメントをつけたのが以下。

- マクロ
' ソリューション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

パタパタと全部ひっくるめて折りたたんでくださるマクロで
便利なことこの上なしです。

ただしすでにたたまれているノード以下は
折りたたまれない仕様となっているようです。
PR
この記事にコメントする
名前
URL
本文
パス   
PREV  HOME  NEXT
忍者ブログ  [PR]

(design by 山瀬)