我一直在尝试(没有太多运气)为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'属性尝试了一系列不同的值,但到目前为止我的标签都没有移动。
有谁知道我做错了什么或有什么建议吗?提前感谢您的时间。
答案 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
如果有人可以进一步提高这一点