如何按文件类型对Visual Studio 2008中的选项卡进行排序?

时间:2011-09-23 03:42:14

标签: visual-studio sorting macros tabs

我一直在尝试(没有太多运气)为Visual Studio 2008编写一个宏,它将打开的.cpp和.h文件分类为两个选项卡组,将标题放在左侧选项卡组和右侧的.cpp文件中。我很想拥有这个功能,因为我花了很多时间来移动我的标签,以便我可以看到我正在处理的课程的两个部分。我知道Visual Studio中有一个非免费的附加组件,它允许使用标签管理,但它与我需要用于工作的附加组件冲突,使得宏成为目前为止的最佳选择。

我确信这可以应用于其他布局和排序需求,如果我可以使它工作。我的想法是每次打开文档窗口时自动对我进行排序,因此我在Visual Studio宏IDE的环境事件部分创建了一个可视化基本宏。下面是我到目前为止的代码:

Public Sub keepHeaderAndCxxInDifferentTabs() Handles WindowEvents.WindowCreated
     Dim openedFile As String
     openedFile = ActiveWindow.Document.FullName

     If openedFile.Contains(".h") Then
         ' if the file being opened is a header file make sure it appears on the left
         If DTE.ActiveDocument.ActiveWindow.Left > 600 Then
             DTE.ExecuteCommand("Window.MovetoNextTabGroup")
         End If
     ElseIf openedFile.Contains(".cpp") Then
         ' if the file being opened is a cpp file make sure it appears on the right
         If DTE.ActiveDocument.ActiveWindow.Left < 250 Then
             DTE.ExecuteCommand("Window.MovetoNextTabGroup")
         End If
     Else
         ' if the file being opened is anything else make sure it appears on the right
         If DTE.ActiveDocument.ActiveWindow.Left < 250 Then
             DTE.ExecuteCommand("Window.MovetoNextTabGroup")
         End If
     End If
 End Sub

可悲的是,这个宏目前没有做任何事情。我最好的猜测是,我可以使用活动窗口的“左”属性来确定新窗口出现在哪个选项卡组中,然后将窗口移动到下一个选项卡组(如果它不在我想要的位置)。我已经为'Left'属性尝试了一系列不同的值,但到目前为止我的标签都没有移动。

有谁知道我做错了什么或有什么建议吗?提前感谢您的时间。

1 个答案:

答案 0 :(得分:1)

我找到了一种方法,可以使用下面的功能做我想做的事情。只要我在运行宏时设置了两个垂直标签,它就会将所有标题放在左侧标签组中,将所有其他文件放在右侧标签组中。这可以进一步扩展,以便当我使用我写的任何其他宏打开任何文件时,它通过在宏运行后调用它来对它们进行排序。遗憾的是,这不会自动生效,每当触发特定事件时,我都无法实际执行排序(使用环境事件部分)。

'=====================================================================
' Sorts all opened documents putting headers into the left tab group
' and everything else into the right tab group
'===================================================================== 
Public Sub SortFilesInTabs()
    For i = 1 To DTE.Windows.Count Step 1
        If DTE.Windows.Item(i).Document IsNot Nothing Then
            If DTE.Windows.Item(i).Document.FullName.Contains(".h") Then
                ' if the file is a header file make sure it appears on the left
                If DTE.Windows.Item(i).Document.ActiveWindow.Left > 600 Then
                    WriteOutput("moved file " & DTE.Windows.Item(i).Document.FullName & " to left")
                    DTE.Windows.Item(i).Document.Activate()
                    DTE.ExecuteCommand("Window.MovetoPreviousTabGroup")
                End If
            ElseIf DTE.Windows.Item(i).Document.FullName.Contains(".cpp") Then
                ' if the file is a cpp file make sure it appears on the right
                If DTE.Windows.Item(i).Document.ActiveWindow.Left < 250 Then
                    WriteOutput("moved file " & DTE.Windows.Item(i).Document.FullName & " to right")
                    DTE.Windows.Item(i).Document.Activate()
                    DTE.ExecuteCommand("Window.MovetoNextTabGroup")
                End If
            ElseIf DTE.Windows.Item(i).Document.FullName.Length > 0 Then
                ' if the file is any other valid document then make sure it appears on the right
                If DTE.Windows.Item(i).Document.ActiveWindow.Left < 250 Then
                    WriteOutput("moved file " & DTE.Windows.Item(i).Document.FullName & " to right")
                    DTE.Windows.Item(i).Document.Activate()
                    DTE.ExecuteCommand("Window.MovetoNextTabGroup")
                End If
            End If
        End If
    Next i
End Sub

如果有人可以进一步提高这一点