Макро свернуть все в решении Visual Studio 2010 - PullRequest
4 голосов
/ 21 мая 2010

Я нашел макрос CollapseAll онлайн, который работал для меня в версиях vs2005 и vs2008. Тем не менее, эта половина пути работает в vs2010. Похоже, он только сворачивает верхние узлы, а не какие-либо подузлы, которые могут быть расширены? есть идеи?

Спасибо, стержень.

    Sub CollapseAll()
        ' Get the the Solution Explorer tree
        Dim UIHSolutionExplorer As UIHierarchy
        UIHSolutionExplorer = DTE.Windows.Item(Constants.vsext_wk_SProjectWindow).Object()
        ' Check if there is any open solution
        If (UIHSolutionExplorer.UIHierarchyItems.Count = 0) Then
            ' MsgBox("Nothing to collapse. You must have an open solution.")
            Return
        End If
        ' Get the top node (the name of the solution)
        Dim UIHSolutionRootNode As UIHierarchyItem
        UIHSolutionRootNode = UIHSolutionExplorer.UIHierarchyItems.Item(1)
        UIHSolutionRootNode.DTE.SuppressUI = True
        ' Collapse each project node
        Dim UIHItem As UIHierarchyItem
        For Each UIHItem In UIHSolutionRootNode.UIHierarchyItems
            'UIHItem.UIHierarchyItems.Expanded = False
            If UIHItem.UIHierarchyItems.Expanded Then
                Collapse(UIHItem)
            End If
        Next
        ' 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.
        UIHSolutionRootNode.Select(vsUISelectionType.vsUISelectionTypeSelect)
        UIHSolutionRootNode.DTE.SuppressUI = False
    End Sub

    Private Sub Collapse(ByVal item As UIHierarchyItem)
        For Each eitem As UIHierarchyItem In item.UIHierarchyItems
            If eitem.UIHierarchyItems.Expanded AndAlso eitem.UIHierarchyItems.Count > 0 Then
                Collapse(eitem)
            End If
        Next
        item.UIHierarchyItems.Expanded = False
    End Sub
End Module

Ответы [ 3 ]

8 голосов
/ 30 марта 2011

(Да, я знаю, что вы пометили другой ответ как принятый, но технически он не отвечал на ваш вопрос о кодировании, хотя он и дал вам ответ. Однако это то, что вы изначально спрашивали.)

На самом деле, я не думаю, что это сработало бы в любой версии Visual Studio, потому что логика в вашей функции Collapse неверна. То же самое с начальным циклом в проекте (который я не уверен, почему вы все равно не передали узел решения в функцию свертывания ...)

В частности, вы проверяете, развернуто ли оно, прежде чем углубляться в дочерние элементы, поэтому, если папка свернута, но ее дочерние элементы развернуты, она не войдет внутрь и не свернет дочерние элементы, поскольку ваша проверка приводит к пропуску. Просто проверьте счет. В конце концов, вы хотите вникнуть во все, что рухнуло.

Вот версия, которую я создал, используя вашу в качестве отправной точки. Я также добавил возможность повторно выбрать выбранный элемент, если он есть. Мне нравится, когда предмет, над которым я работаю, выбран. И если я хочу, чтобы все было свернуто, я либо выбираю корневой узел, либо отменяю выбор всего, в обоих случаях он затем выбирает корень (узел решения).

Я также добавил функцию MultiBeep для звуковой обратной связи, так как я не фанат окон сообщений. 2 сигнала - это успех, 3 означает, что у вас нет открытого решения.

Sub CollapseSolutionTree()

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

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

  ' Get the selected node (if any)
    Dim SelectedNode As UIHierarchyItem
    Try
        SelectedNode = SolutionExplorer.SelectedItems(0)
    Catch
    End Try

  ' Get the top node (the name of the solution)
    Dim SolutionNode As UIHierarchyItem = SolutionExplorer.UIHierarchyItems.Item(1)
    SolutionNode.DTE.SuppressUI = True

  ' Collapse the solution tree
    CollapseSolutionExplorerNode(SolutionNode)

  ' If there was a selected item before the command, re-select it.  Otherwise select the solution node.
    If SelectedNode isnot Nothing
        SelectedNode.Select(vsUISelectionType.vsUISelectionTypeSelect)
    Else
        SolutionNode.Select(vsUISelectionType.vsUISelectionTypeSelect)
    End If

    SolutionNode.DTE.SuppressUI = False

    MultiBeep(2)

End Sub

Private Sub CollapseSolutionExplorerNode(ByVal Folder As UIHierarchyItem)

    For Each Subfolder As UIHierarchyItem In Folder.UIHierarchyItems
        If Subfolder.UIHierarchyItems.Count Then CollapseSolutionExplorerNode(Subfolder)
    Next

    Folder.UIHierarchyItems.Expanded = False

End Sub

Private Sub MultiBeep(Count As Integer, Optional Spacing As Integer = 100)
    Beep
    For I = 2 to Count
        System.Threading.Thread.CurrentThread.Sleep(Spacing)
        Beep
    Next
End Sub

НТН,

Mark

2 голосов
/ 09 июня 2010
0 голосов
/ 29 сентября 2011

Эта функция является частью бесплатного Microsoft Productivity Power Tools расширения для Visual Studio 11 и, вероятно, будет найдена в качестве стандартной функции также в следующей версии Visual Studio.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...