Switch between Header and CPP File for Visual Studio .NET






4.71/5 (10 votes)
Here are two methods that allow you to quickly switch between associated header and implementation files in Visual Studio .NET
Introduction
Here are two methods that allow you to quickly switch between the associated header and implementation files in Visual Studio .NET.
Pavel Sokolov's Solution
A simple macro that allows you to quickly switch between the associated header and implementation files. This is a modification for Visual Studio .NET of the macro by Nooruddin Kapasi.
This macro simply switches between a *.h file and a *.cpp file, without any errors (if the *.h or the *.cpp file does not exist).
The Code
Option Strict Off
Option Explicit Off
Imports EnvDTE
Imports Microsoft.VisualBasic
Public Module Switch
Sub Switch()
'////////////////////////////////////////////
'Nooruddin Kapasi 1998.
'Pavel Sokolov , CEZEO software , http://www.cezeo.com , Adaptation for .NET
'DESCRIPTION: Switch Between Header and cpp
'////////////////////////////////////////////
Dim a As String
Dim b As String
Dim Flag As Integer
Flag = 0
a = DTE.ActiveDocument.FullName()
tmp = InStr(a, ".cpp")
If tmp Then
b = Left(a, Len(a) - 3) + "h"
Flag = 1
Else
tmp = InStr(a, ".h")
If tmp Then
b = Left(a, Len(a) - 1) + "cpp"
Flag = 1
End If
End If
If Flag Then
DTE.Documents.Open(b, "Text")
End If
End Sub
End Module
Pierre Arnaud's Solution
The Switch_H_CPP
macro switches between the active document (either source file or header file) and its counterpart (either header file or source file). Whereas simpler macros get this job done more efficiently (see the above), they do not work if the header files and source files are not stored in the same directory.
Switch_H_CPP
looks for a matching counterpart by walking through all the loaded project files. It can, therefore, deduce the full path of the file and open it even if it is in a different directory as the active document.
Source
Here comes the source:
Option Strict Off
Option Explicit Off
Imports EnvDTE
Imports System.Diagnostics
Public Module Opac
Function WalkProjectItemsAndOpen(ByRef items As ProjectItems, _
ByRef name As String) As Boolean
Dim item As ProjectItem
If ReferenceEquals(items, Nothing) Then
Return False
End If
For Each item In items
Dim sub_items As ProjectItems
sub_items = item.SubProject
If Not sub_items Is Nothing Then
If WalkProjectItemsAndOpen(sub_items, name) Then
Return True
End If
End If
If item.Name = name Then
'MsgBox("Found " + name + " in project " + _
items.ContainingProject.UniqueName)
Dim op As ItemOperations
op = DTE.ItemOperations
op.OpenFile(item.FileNames(0), Constants.vsViewKindTextView)
Return True
End If
Next
Return False
End Function
Sub Swap_H_CPP()
Dim proj As Project
Dim doc As Document
Dim name As String
doc = DTE.ActiveDocument
name = doc.Name
If name.EndsWith(".h") Then
name = name.Replace(".h", ".cpp")
ElseIf name.EndsWith(".cpp") Then
name = name.Replace(".cpp", ".h")
End If
For Each proj In DTE.Solution.Projects
If WalkProjectItemsAndOpen(proj.ProjectItems, name) Then
Exit Sub
End If
Next
Beep()
End Sub
End Module
History
- 20th September, 2002 - Updated Pierre Arnaud's solution to stop an exception being thrown in certain circumstances
- 2nd June, 2008 - Fixed a typo in
WalkProjectItemsAndOpen