Environment:
Here’s a block comment macro for Visual Studio .NET (as I wasn’t able to find one and I wanted to find the differences in the API). It seems to work okay for me. Feel free to post bug fixes and so forth. I hope someone finds it useful. Good luck.
The code follows:
' This will comment/uncomment out blocks. Blocks are
' commented at the beginning of the line.
' Assign this to a key (e.g. ctrl-/) and it will toggle the
' current line/block of code.
' This will handle both "//" and "'" style comments. Adapted
' to VS.NET by Tim Stubbs
' Original code from the VS example and (idea from) Adam Solesby
' who originally did this for VC 6 (or earlier). There's been
' quite a few changes to VS.NET so this took a little creative
' adaptation. I hate VB :) Disclaimer: Use at own risk. I did
' it for ME!
' I don't need anything other than block commenting tbh, so
' I've not special cased single line selection.
Sub CustomCommentOutVSNET()
'DESCRIPTION: Comments out a selected block of text.
Dim win As Window
win = ActiveWindow()
If win.Type <> EnvDTE.vsWindowType.vsWindowTypeDocument Then
MsgBox("This macro can only be run when a text editor _
window is active.")
Else
TypeOfFile = FileType(ActiveDocument)
' MsgBox "Type: " + CStr(TypeOfFile)
If TypeOfFile > 0 And TypeOfFile < 6 Then
If TypeOfFile > 3 Then
CommentType = "'" ' VB bah. humbug.
CommentWidth = 1
Else
CommentType = "//" ' C++ and java style comments
CommentWidth = 2
End If
StartLine = ActiveDocument.Selection.TopLine
EndLine = ActiveDocument.Selection.BottomLine
If EndLine < StartLine Then
Temp = StartLine
StartLine = EndLine
EndLine = Temp
End If
For i = StartLine To EndLine
ActiveDocument.Selection.GoToLine(i)
' check for nasties like blank lines or short lines
ActiveDocument.Selection.EndOfLine(True)
Dim objActive As VirtualPoint = _
ActiveDocument.Selection.ActivePoint
Dim right, line As Integer
right = objActive.DisplayColumn
ActiveDocument.Selection.StartOfLine _
(vsStartOfLineOptionsFirstColumn)
ActiveDocument.Selection.CharRight _
(True, CommentWidth)
line = objActive.Line()
If (line > i) Then ' we've shifted line, _
reset to original line
ActiveDocument.Selection.GotoLine(i)
ActiveDocument.Selection.EndOfLine(True)
End If
'Enable the following for debugging
'Dim blah, wibble As String
'wibble = ActiveDocument.Selection.text()
'blah = CommentType
If ActiveDocument.Selection.text() = CommentType _
Then
ActiveDocument.Selection.Delete()
Else
ActiveDocument.Selection.EndOfLine(True)
wibble = CommentType + ActiveDocument() _
.Selection.text()
ActiveDocument.Selection.text() = CommentType _
+ ActiveDocument().Selection.text()
End If
Next
Else
MsgBox("Unable to comment out the highlighted text" _
+ vbLf + _
"because the file type was unrecognized." + vbLf + _
"If the file has not yet been saved, " + vbLf + _
"please save it and try again.")
End If
End If
End Sub