vs2003用宏来增加效率
来源:互联网 发布:基于单片机的智能台灯 编辑:程序博客网 时间:2024/06/01 08:58
代码敲多了,难免会有很多重复的工作,如为每个成员函数和参数写说明文档等,为此可以宏来提高效率.下面是我写的和一些改进后的宏,可以添加到vs2003的宏管理器里面,就可以使用了.
Option Strict Off
Option Explicit Off
Imports EnvDTE
Imports System.Diagnostics
Imports System.Windows
Imports System.Windows.Forms
Imports System
Imports System.Collections.Specialized
Public Module OwnMacros
'在选择的文本前面粘贴文本
Public Sub PasteAtBegin()
PasteText(0)
End Sub
'在选择的文本最后粘贴文本
Public Sub PasteAtEnd()
PasteText(1)
End Sub
'在选择的文本前后粘贴文本
Public Sub PasteAtBeginEnd()
PasteText(2)
End Sub
'粘贴文本
Private Sub PasteText(ByVal position As Integer)
Dim beginline, endline As Integer
Dim objTextSelection As TextSelection
Dim i As Integer
objTextSelection = CType(DTE.ActiveDocument.Selection(), EnvDTE.TextSelection)
beginline = objTextSelection.AnchorPoint.Line
endline = objTextSelection.BottomPoint.Line
For i = beginline To endline
objTextSelection.GotoLine(i, False)
If position = 0 Or position = 2 Then
objTextSelection.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstText)
objTextSelection.Paste()
End If
If position = 1 Or position = 2 Then
objTextSelection.EndOfLine()
objTextSelection.Paste()
End If
Next
End Sub
‘对多行文本进行粘贴
Sub MultiLinePaste()
Dim beginrow, endrow As Integer
Dim objTextSelection As TextSelection
Dim i As Integer
Dim value As New StringCollection
objTextSelection = CType(DTE.ActiveDocument.Selection, EnvDTE.TextSelection)
beginrow = objTextSelection.AnchorPoint.Line
endrow = objTextSelection.BottomPoint.Line
If beginrow < endrow Then
For i = beginrow To endrow
objTextSelection.GotoLine(i, False)
objTextSelection.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstText)
objTextSelection.EndOfLine(True)
value.Add(objTextSelection.Text)
objTextSelection.Delete()
Next
objTextSelection.GotoLine(beginrow, False)
objTextSelection.Paste()
For i = beginrow To endrow
objTextSelection.GotoLine(i, False)
objTextSelection.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstText)
objTextSelection.Insert(value.Item(i - beginrow))
objTextSelection.Insert(" ")
Next
value.Clear()
End If
End Sub
Sub MultiLineRepert()
Dim beginrow, endrow As Integer
Dim objTextSelection As TextSelection
Dim i As Integer
objTextSelection = CType(DTE.ActiveDocument.Selection, EnvDTE.TextSelection)
beginrow = objTextSelection.AnchorPoint.Line
endrow = objTextSelection.BottomPoint.Line
If beginrow < endrow Then
For i = beginrow To endrow
objTextSelection.GotoLine(i, False)
objTextSelection.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstText)
objTextSelection.EndOfLine(True)
objTextSelection.Copy()
objTextSelection.EndOfLine(False)
objTextSelection.Insert(Microsoft.VisualBasic.Constants.vbTab + Microsoft.VisualBasic.Constants.vbTab)
objTextSelection.Paste()
Next
End If
End Sub
'对于选中的文本添加vb注释
Public Sub AddVbComment()
AddCommentInfo(0)
End Sub
'对于选中的文本添加vc注释
Public Sub AddVcComment()
AddCommentInfo(1)
End Sub
'添加注释文本
Private Sub AddCommentInfo(ByVal type As Integer)
Dim objTextSelection As TextSelection
Dim comment As String
Dim text As String
objTextSelection = CType(DTE.ActiveDocument.Selection, EnvDTE.TextSelection)
text = objTextSelection.Text
If type = 0 Then
comment = "'"
End If
If type = 1 Then
comment = "//"
End If
objTextSelection.LineUp()
objTextSelection.NewLine()
objTextSelection.Text = comment + "<摘要>"
objTextSelection.NewLine()
objTextSelection.Text = comment + text
objTextSelection.NewLine()
objTextSelection.Text = comment + "</摘要>"
End Sub
Public Sub ClearScript()
Dim beginPoint As VirtualPoint
Dim endPoint As VirtualPoint
Dim objTextSelection As TextSelection
Dim b, e As Integer
Dim bline, eline As Integer
Dim findresult As Boolean
objTextSelection = CType(DTE.ActiveDocument.Selection, EnvDTE.TextSelection)
'objTextSelection.StartOfDocument(False)
findresult = True
While findresult = True
findresult = False
If objTextSelection.FindText("<script", vsFindOptions.vsFindOptionsMatchWholeWord) Then
beginPoint = objTextSelection.AnchorPoint
bline = beginPoint.Line
b = beginPoint.AbsoluteCharOffset
Else
Exit While
End If
If objTextSelection.FindText("/script>", vsFindOptions.vsFindOptionsMatchWholeWord) Then
endPoint = objTextSelection.BottomPoint
eline = endPoint.Line
e = endPoint.AbsoluteCharOffset
findresult = True
End If
If (bline <= eline) And ((eline - bline) <= 3) Then
objTextSelection.MoveToAbsoluteOffset(b)
objTextSelection.MoveToAbsoluteOffset(e, True)
objTextSelection.Delete()
Else
'objTextSelection.WordRight(False)
objTextSelection.MoveToPoint(objTextSelection.BottomPoint)
End If
End While
'DTE.ActiveDocument.Save()
DTE.ActiveDocument.Close(vsSaveChanges.vsSaveChangesYes)
End Sub
‘添加最后修改信息
Public Sub AddLastModify()
Dim objTextSelection As TextSelection
Dim comment As String
comment = LineOrientedCommentStart()
If comment = "" Then
comment = "--"
End If
objTextSelection = CType(DTE.ActiveDocument.Selection, EnvDTE.TextSelection)
objTextSelection.StartOfDocument(False)
objTextSelection.NewLine()
objTextSelection.Text = comment + "#################################################"
objTextSelection.NewLine()
objTextSelection.Text = comment + "修改: "
objTextSelection.NewLine()
objTextSelection.Text = comment + "修改时间: "
objTextSelection.Text += System.DateTime.Now.ToLongDateString() + " " + System.DateTime.Now.ToLongTimeString()
objTextSelection.NewLine()
objTextSelection.Text = comment + "#################################################"
objTextSelection.NewLine()
objTextSelection.NewLine()
End Sub
‘添加代码版本信息
Public Sub AddVersionInfo()
Dim objTextSelection As TextSelection
Dim comment As String
comment = LineOrientedCommentStart()
If comment = "" Then
comment = "--"
End If
objTextSelection = CType(DTE.ActiveDocument.Selection, EnvDTE.TextSelection)
objTextSelection.StartOfDocument(False)
objTextSelection.NewLine()
objTextSelection.Text = comment + "#################################################"
objTextSelection.NewLine()
objTextSelection.Text = comment
objTextSelection.NewLine()
objTextSelection.Text = comment + "版本: "
objTextSelection.NewLine()
objTextSelection.Text = comment + "作者: "
objTextSelection.NewLine()
objTextSelection.Text = comment + "说明: "
objTextSelection.NewLine()
objTextSelection.Text = comment + "最后修改: "
objTextSelection.Text += System.DateTime.Now.ToLongDateString() + " " + System.DateTime.Now.ToLongTimeString()
objTextSelection.NewLine()
objTextSelection.Text = comment
objTextSelection.NewLine()
objTextSelection.Text = comment + "#################################################"
objTextSelection.NewLine()
objTextSelection.NewLine()
objTextSelection.NewLine()
End Sub
Private Sub CommentCodeType(ByRef celttype As CodeType)
Dim celt As CodeElement
Dim ep As EditPoint = celttype.GetStartPoint(vsCMPart.vsCMPartHeader).CreateEditPoint()
Dim commentStart As String = LineOrientedCommentStart()
If (commentStart.Length = 2) Then
commentStart = commentStart & commentStart.Chars(1) & " "
ElseIf (commentStart.Length = 1) Then
commentStart = commentStart & commentStart.Chars(0) & commentStart.Chars(0) & " "
End If
Try
DTE.UndoContext.Open("Insert Doc Comments")
For Each celt In celttype.Members
'通过检验上一行的文本来决定该成员是否已经注释过了
ep.MoveToPoint(celt.GetStartPoint(vsCMPart.vsCMPartHeader))
ep.LineUp()
Dim alreadycheck As String = Trim(ep.GetLines(ep.Line, ep.Line + 1))
If (alreadycheck = Trim(commentStart)) Then
GoTo NEXT_LOOP
End If
If (celt.Kind = vsCMElement.vsCMElementFunction) Then
Dim codefun As CodeFunction = celt
ep.MoveToPoint(codefun.GetStartPoint(vsCMPart.vsCMPartHeader))
Dim params As CodeElements = codefun.Parameters
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.LineUp()
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart & "<摘要>")
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart & "摘要: " & celt.Name & ".")
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart & "</摘要>")
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart)
Dim celt2 As CodeElement
Dim cp As CodeParameter
For Each celt2 In params
cp = celt2
ep.Insert("<param name=" & cp.Name & " desc=></param>")
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart)
Next 'param
End If 'we have a function
If (celt.Kind = vsCMElement.vsCMElementProperty) Then
Dim codeprop As CodeProperty = celt
ep.MoveToPoint(codeprop.GetStartPoint(vsCMPart.vsCMPartHeader))
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.LineUp()
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart & "<属性>")
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart & "说明:" & celt.Name & ".")
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart & "</属性>")
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart)
End If
If (celt.Kind = vsCMElement.vsCMElementVariable) Then
Dim code As CodeVariable = celt
ep.MoveToPoint(code.GetStartPoint(vsCMPart.vsCMPartHeader))
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.LineUp()
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart & "<成员>")
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart & "说明:" & celt.Name & ".")
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart & "</成员>")
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart)
End If
If (celt.Kind = vsCMElement.vsCMElementStruct) Then
Dim code As CodeStruct = celt
ep.MoveToPoint(code.GetStartPoint(vsCMPart.vsCMPartHeader))
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.LineUp()
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart & "<结构>")
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart & "说明:" & celt.Name & ".")
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart & "</结构>")
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart)
End If
NEXT_LOOP:
Next 'code elt member
Finally
DTE.UndoContext.Close()
End Try
End Sub
'为vb代码添加中文注释
Sub InsertChsComments()
Dim projitem As ProjectItem = DTE.ActiveDocument.ProjectItem
Dim filecm As FileCodeModel = projitem.FileCodeModel
Dim celt As CodeElement
Dim celttype As CodeType
Dim i As Integer
Dim j As Integer
For i = 1 To filecm.CodeElements.Count
celt = filecm.CodeElements.Item(i)
If (TypeOf celt Is CodeNamespace) Then
Dim tt As CodeNamespace
tt = celt
For j = 1 To tt.Members.Count
'celt = celt.members.item(1)
celt = tt.Members.Item(j)
If (TypeOf celt Is CodeType) Then
celttype = CType(celt, CodeType)
Else
Throw New Exception("Didn't find a type definition as first thing in file or find a namespace as the first thing with a type inside the namespace.")
End If
CommentCodeType(celttype)
Next
Else
If (TypeOf celt Is CodeType) Then
celttype = CType(celt, CodeType)
Else
Throw New Exception("Didn't find a type definition as first thing in file or find a namespace as the first thing with a type inside the namespace.")
End If
CommentCodeType(celttype)
End If
Next
End Sub
Private Sub InsertDocChsComments()
Dim projitem As ProjectItem = DTE.ActiveDocument.ProjectItem
Dim filecm As FileCodeModel = projitem.FileCodeModel
Dim celt As CodeElement = filecm.CodeElements.Item(1)
Dim celttype As CodeType
If (TypeOf celt Is CodeNamespace) Then
celt = celt.members.item(1)
End If
If (TypeOf celt Is CodeType) Then
celttype = CType(celt, CodeType)
Else
Throw New Exception("Didn't find a type definition as first thing in file or find a namespace as the first thing with a type inside the namespace.")
End If
Dim ep As EditPoint = celttype.GetStartPoint(vsCMPart.vsCMPartHeader).CreateEditPoint()
Dim commentStart As String = LineOrientedCommentStart()
If (commentStart.Length = 2) Then
commentStart = commentStart & commentStart.Chars(1) & " "
ElseIf (commentStart.Length = 1) Then
commentStart = commentStart & commentStart.Chars(0) & commentStart.Chars(0) & " "
End If
Try
DTE.UndoContext.Open("Insert Doc Comments")
For Each celt In celttype.Members
If (celt.Kind = vsCMElement.vsCMElementFunction) Then
Dim codefun As CodeFunction = celt
ep.MoveToPoint(codefun.GetStartPoint(vsCMPart.vsCMPartHeader))
Dim params As CodeElements = codefun.Parameters
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.LineUp()
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart & "<摘要>")
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart & "摘要: " & celt.Name & ".")
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart & "</摘要>")
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart)
Dim celt2 As CodeElement
Dim cp As CodeParameter
For Each celt2 In params
cp = celt2
ep.Insert("<param name=" & cp.Name & "></param>")
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart)
Next 'param
End If 'we have a function
If (celt.Kind = vsCMElement.vsCMElementProperty) Then
Dim codeprop As CodeProperty = celt
ep.MoveToPoint(codeprop.GetStartPoint(vsCMPart.vsCMPartHeader))
'Dim params As CodeElement = codeprop.Attributes
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.LineUp()
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart & "<属性>")
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart & "说明:" & celt.Name & ".")
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart & "</属性>")
ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart)
'Dim celt2 As CodeElement
'Dim cp As CodeParameter
'For Each celt2 In params
' cp = celt2
' ep.Insert("< param name=" & cp.Name & "></param>")
' ep.Insert(Microsoft.VisualBasic.Constants.vbCrLf)
' ep.Insert(Microsoft.VisualBasic.Constants.vbTab & commentStart)
'Next
End If
Next 'code elt member
Finally
DTE.UndoContext.Close()
End Try
End Sub
'返回注释类型
Function LineOrientedCommentStart(Optional ByVal doc As Document = Nothing) As String
If (doc Is Nothing) Then
doc = DTE.ActiveDocument
End If
Dim ext As String = doc.Name
If (ext.EndsWith(".cs")) Then
Return "//"
ElseIf (ext.EndsWith(".cpp")) Then
Return "//"
ElseIf (ext.EndsWith(".h")) Then
Return "//"
ElseIf (ext.EndsWith(".vb")) Then
Return "'"
ElseIf (ext.EndsWith(".idl")) Then
Return "//"
End If
End Function
End Module
- vs2003用宏来增加效率
- vs2003
- 增加索引提高查询效率
- 使用 Cache 來增加系統效率
- 改进css的写法,增加浏览器效率
- matlab增加数组元素的效率分析
- 工具效率 Unity3d右键增加SVN命令
- 调试oracle缓存命中率来增加数据库的效率
- 增加Distinct后查询效率反而提高(转载)
- paip.提升效率---给页面程序增加调试功能
- Oracle为了增加查询效率给条件字段添加索引
- ListView提升运行效率及增加点击事件
- 编写一个增加开发效率的BaseRecyclerAdapter,持续中...
- VS2003 快捷键
- vs2003快捷键
- vs2003快捷键
- vs2003快捷键
- 加速vs2003
- C#2.0 Partial 特性
- mysql实际操作
- C++Builder 资料库
- 使用Java中的Date和Calendar类
- MTL 带状矩阵乘法
- vs2003用宏来增加效率
- 刚才在学校装电脑,一台电脑硬盘认不出了......下周二去装系统,还要用vb调用vfp,98没办法
- managed DirectX9(第二章)
- managed DirectX (第三章)
- (13) 院士呼吁建节约型社会:有权花钱 无权浪费
- 问一个控件
- 批量获取DataGrid控件模板列中的数据
- 在ASP.NET中结束EXCEL进程的程序
- 心目中的编程高手 作者: dodofcboy (鼓手)