Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the best/fastest/easiest way to collapse all projects in Visual Studio?

I'm currently using DPack as this adds a "Collapse All Projects" option to the Solution node in Solution Explorer. It works pretty well but can take a while to execute and doesn't always collapse everything fully.

Are there any better alternatives? Preferably free and easy to install/setup. There are lots out there but which work best and don't have any bugs or performance issues.

like image 649
Tom Robinson Avatar asked Sep 17 '08 13:09

Tom Robinson


People also ask

How do I collapse all projects in Visual Studio?

In Visual Studio, go to Tools > Options > Keyboard. In the Show commands containing text box, type in CollapseProjects. Select the ProjectandSolutionContextMenus. Projects.

What is the shortcut to collapse all functions in Visual Studio?

CTRL + M + O will collapse all.

How do I collapse all rows in Visual Studio code?

In Visual Studio Professional, we have a shortcut key, Ctrl + M Ctrl + O to collapse all methods and properties in a class.


2 Answers

I use the following Macro which works in Visual Studio 2005 and Visual Studio 2008:

  1. View > Other Windows > Macro Explorer (Alt+F8)
  2. Right-click on the MyMacros node in Macro Explorer
  3. New Module...
  4. Name it CollapseAll (or whatever you like)
  5. Replace the default code with the code shown below
  6. File > Save CollapseAll (Ctrl+S)
  7. Close the Macro editor

To set up a keyboard shortcut:

  1. Tools > Customize... > Commands
  2. Keyboard...
  3. Show commands containing: Macros.MyMacros.CollapseAll.CollapseAll
  4. Assign a keyboard shortcut (I use Alt+C)

Code

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics

Public Module CollapseAll
    Sub CollapseAll()

        ' Get the the Solution Explorer tree
        Dim solutionExplorer As UIHierarchy
        solutionExplorer = DTE.Windows.Item(Constants.vsext_wk_SProjectWindow).Object()

        ' Check if there is any open solution
        If (solutionExplorer.UIHierarchyItems.Count = 0) Then
            Return
        End If

        ' Get the top node (the name of the solution)
        Dim rootNode As UIHierarchyItem = solutionExplorer.UIHierarchyItems.Item(1)

        rootNode.DTE.SuppressUI = True

        ' Collapse each project node
        Collapse(rootNode, solutionExplorer)

        ' Select the solution node, or else when you click 
        ' on the solution window
        ' scrollbar, it will synchronize the open document 
        ' with the tree and pop
        ' out the corresponding node which is probably not what you want.

        rootNode.Select(vsUISelectionType.vsUISelectionTypeSelect)
        rootNode.DTE.SuppressUI = False

    End Sub

    Sub CollapseSelected()

        ' Get the the Solution Explorer tree
        Dim solutionExplorer As UIHierarchy
        solutionExplorer = DTE.Windows.Item(Constants.vsext_wk_SProjectWindow).Object()

        ' Check if there is any open solution
        If (solutionExplorer.UIHierarchyItems.Count = 0) Then
            Return
        End If

        ' Get the top node (the name of the solution)
        Dim selected As Array = solutionExplorer.SelectedItems

        If (selected.Length = 0) Then Return

        Dim rootNode As UIHierarchyItem = selected(0)
        rootNode.DTE.SuppressUI = True

        ' Collapse each project node
        Collapse(rootNode, solutionExplorer)

        ' Select the solution node, or else when you click 
        ' on the solution window
        ' scrollbar, it will synchronize the open document 
        ' with the tree and pop
        ' out the corresponding node which is probably not what you want.

        rootNode.Select(vsUISelectionType.vsUISelectionTypeSelect)
        rootNode.DTE.SuppressUI = False

    End Sub

    Private Sub Collapse(ByVal item As UIHierarchyItem, ByRef solutionExplorer As UIHierarchy)

        For Each innerItem As UIHierarchyItem In item.UIHierarchyItems
            If innerItem.UIHierarchyItems.Count > 0 Then

                ' Re-cursive call
                Collapse(innerItem, solutionExplorer)

                ' Collapse
                If innerItem.UIHierarchyItems.Expanded Then
                    innerItem.UIHierarchyItems.Expanded = False
                    If innerItem.UIHierarchyItems.Expanded = True Then
                        ' Bug in VS 2005
                        innerItem.Select(vsUISelectionType.vsUISelectionTypeSelect)
                        solutionExplorer.DoDefaultAction()
                    End If
                End If

            End If
        Next

    End Sub

End Module

I didn't write this code and I'm not sure where this code came from, but there are variations of it online.

like image 195
Tom Robinson Avatar answered Sep 29 '22 16:09

Tom Robinson


For VS2005, I've been using CoolCommands 4.0. The feature description is more complete for the older 3.0 version. Version 3 had an .msi installer. Version 4 is a .zip file (which was easier for my environment anyway).

My favorite features (a subset of the complete list):

  • From the Solution explorer:
    • Collapse All Projects
    • Open containing folder (Project/file level only)
  • From the filename tabs above the editor
    • Locate in Solution Explorer
  • From the context menu in the editor
    • Demo Font
like image 22
Andy Stevenson Avatar answered Sep 29 '22 14:09

Andy Stevenson