Dim selection As TextSelection = DTE.ActiveDocument.Selection'定义 TextSelection 对象

selection.StartOfLine()'移动到当前光标所在行的起始位置

Dim keyword = selection.Text.Trim()'取得整行文本

'获取当前选择首点所在行

Dim endLine As Integer

endLine = selection.TopPoint.Line

selection.NewLine()'插入一行空白行

selection.LineUp()'将光标移回到新空白行

selection.GotoLine(startLine) '将光标位置跳至某行的起始位置

selection.MoveToLineAndOffset(startLine,10 )'将光标跳至某行的起始位置+10个字符处

selection.LineDown(True, 18) '将选择位置向下移18行,true表示将选择范围进行扩展,选择的起始位置不变,终止位置下移18行

selection.CharRight(True,5) ’与上面类似,将选择范围向右扩展5个字符

'VB语法输入多段文本只能用" & Chr(13) & _ 连接的方法

'在选择范围中进行文本替换

DTE.Find.Action = vsFindAction.vsFindActionReplaceAll

DTE.Find.Target = vsFindTarget.vsFindTargetCurrentDocumentSelection

DTE.Find.FindWhat = "dvxxxdv"

DTE.Find.ReplaceWith = keyword

DTE.Find.Execute()

DTE.Find.Target = vsFindTarget.vsFindTargetCurrentDocument '定义搜索范围,注意:默认是vsFindTargetCurrentDocumentSelection,只在当前选中文本中查找,vsFindTargetCurrentDocument表示全文查找

DTE.Find.Backwards = True '向上还是向下,默认居然是向上

DTE.Find.Action = vsFindAction.vsFindActionFind

DTE.Find.FindWhat = "{"

DTE.Find.Execute()

MsgBox(selection.Text.Trim())'弹出提示框

实例:

Imports System

Imports EnvDTE

Imports EnvDTE80

Imports EnvDTE90

Imports EnvDTE90a

Imports EnvDTE100

Imports System.Diagnostics

Public Module SkModule

'sk 2014.8.27 快速输入string.Format

Sub SQLFormat()

ActiveDocument.Selection.Text = "string.Format(@""select "",AisLogical.curUser);"

ActiveDocument.Selection.EndOfLine()

ActiveDocument.Selection.CharLeft(False, 23)

End Sub

'sk 2016.1.8将DataGridview控件加上两个事件替代selectionchanged事件

Sub DvAddFunc()

Dim selection As TextSelection = DTE.ActiveDocument.Selection

'选择整行,注意此时光标焦点落在下一行开始处

selection.SelectLine()

'取得整行文本

Dim keyword = selection.Text.Trim()

selection.Text = ""

'插入一行空白行

selection.NewLine()

'将光标移回到新空白行

selection.LineUp()

Dim startLine As Integer

'获取selection末端行号

startLine = selection.BottomPoint.Line

'VB语法输入多段文本只能用" & Chr(13) & _连接的方法

'注意在输入过程中VS环境可能会自动将某些看似语法错误的表达式替换成貌似正确的表达式,可能跟插入文本原文不一致

selection.Text = "//将下面两行剪切到该Dv控件所在窗体的Designer.cs文件中的InitializeComponent()函数末尾" & Chr(13) & _

"this.dvxxxdv.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dvxxxdv_CellClick);" & Chr(13) & _

"this.dvxxxdv.KeyUp += new System.Windows.Forms.KeyEventHandler(this.dvxxxdv_KeyUp);" & Chr(13) & _

"public void zMySelectionChanged_dv()" & Chr(13) & _

"{" & Chr(13) & _

"if (dvxxxdv.SelectedRows.Count == 0) return;" & Chr(13) & _

"}" & Chr(13) & _

"private void dvxxxdv_CellClick(object sender, DataGridViewCellEventArgs e)" & Chr(13) & _

"{" & Chr(13) & _

"if (e.RowIndex < 0) return;//如果不是单击列表头" & Chr(13) & _

"zMySelectionChanged_dv();" & Chr(13) & _

"}" & Chr(13) & _

"" & Chr(13) & _

"private void dvxxxdv_KeyUp(object sender, KeyEventArgs e)" & Chr(13) & _

"{" & Chr(13) & _

"if (e.KeyData == Keys.Down || e.KeyData == Keys.Up)" & Chr(13) & _

"zMySelectionChanged_dv();            " & Chr(13) & _

"}" & Chr(13)

'将选择起始位置重新设回文本插入前的位置

selection.GotoLine(startLine)

selection.LineDown(True, 18)

'在选择范围中进行文本替换

DTE.Find.Action = vsFindAction.vsFindActionReplaceAll

DTE.Find.Target = vsFindTarget.vsFindTargetCurrentDocumentSelection

DTE.Find.FindWhat = "dvxxxdv"

DTE.Find.ReplaceWith = keyword

DTE.Find.Execute()

End Sub

'sk 2016.1.9将选择的范围加上#region结构

Sub AddRegion()

Dim selection As TextSelection = DTE.ActiveDocument.Selection '定义TextSelection 对象

Dim startLine As Integer

startLine = selection.TopPoint.Line

Dim endLine As Integer

endLine = selection.BottomPoint.Line

selection.GotoLine(startLine) '将光标位置跳至某行的起始位置

selection.Text = "#region" + Chr(13)

selection.GotoLine(endLine + 1) '将光标位置跳至某行的起始位置

selection.EndOfLine()

selection.NewLine()

selection.Text = "#endregion"

End Sub

'sk 2016.1.10将当前光标所在模块加上#region结构

Sub RegionOnBlock()

Dim selection As TextSelection = DTE.ActiveDocument.Selection '定义TextSelection 对象

Dim startline As Integer

startline = -1

Dim endline As Integer

endline = -1

Dim currentline As Integer = selection.ActivePoint.Line

selection.EndOfDocument() '将选择行移到最末一行

Dim documentlines As Integer = selection.ActivePoint.Line '整篇文档总行数

selection.GotoLine(currentline) '此时光标会停留在行首,如果加上,true参数整行将选择,选择的起始位置保持在行首和末尾

Dim kuohaoleft = 0 '从初始位置到当前位置共出现过几次{

selection.SelectLine()

selection.CharLeft(True)

Dim tx As String = selection.Text.Trim()

If (tx = "{") Then

kuohaoleft = 1

startline = selection.ActivePoint.Line

ElseIf (tx.IndexOf("{") >= 0) Then

MsgBox("光标所在行的'{'没有单独占一行,请重新选择行")

Return

Else

Do While kuohaoleft <= 0

'以下行为上移整行选择,选择的起始位置在行首和末尾,如果没有第句,选择末端会停留在下一行,也可用selection.GotoLine(xxline,true)实现

selection.LineUp()

selection.SelectLine()

selection.CharLeft(True)

tx = selection.Text.Trim()

If (tx = "{") Then

kuohaoleft += 1

ElseIf (tx = "}") Then

kuohaoleft -= 1

End If

If (selection.ActivePoint.Line = 1) Then Exit Do

Loop

If (kuohaoleft = 1) Then

startline = selection.ActivePoint.Line

Else

MsgBox("从当前位置以上没有出现单独一行的'{'")

Return

End If

End If

'此时光标停留在初始位置往上真实的第一个{处

kuohaoleft = 1 '其实运行到这里肯定kuohaoleft=1

Do While (kuohaoleft > 0)

selection.LineDown()

selection.SelectLine()

selection.CharLeft(True)

tx = selection.Text.Trim()

If (tx = "{") Then

kuohaoleft += 1

ElseIf (tx = "}") Then

kuohaoleft -= 1

End If

If (selection.ActivePoint.Line = documentlines) Then Exit Do

Loop

If (kuohaoleft = 0) Then

endline = selection.ActivePoint.Line

Else

MsgBox("从当前位置以下没有出现单独一行的'}'")

Return

End If

If (endline > startline And startline > 0) Then

selection.GotoLine(startline)

selection.EndOfLine()

selection.Text = Chr(13) + "#region"

selection.GotoLine(endline)

selection.EndOfLine()

selection.Text = Chr(13) + "#endregion"

'将光标放置到起始{行的末尾

selection.GotoLine(startline)

selection.EndOfLine()

End If

End Sub

End Module

2016.1.1 VS中宏的使用技巧点滴的更多相关文章

  1. C++ 中宏的使用 --来自:http://blog.csdn.net/hgl868/article/details/7058906

    宏在代码中的使用实例: g_RunLog2("Middleware client for Linux, build:%s %s", __DATE__, __TIME__); 下面详 ...

  2. C语言中宏定义(#define)时do{}while(0)的价值(转)

    C语言中宏定义(#define)时do{}while(0)的价值 最近在新公司的代码中发现到处用到do{...}while(0),google了一下,发现Stack Overflow上早有很多讨论,总 ...

  3. c 语言中宏定义和定义全局变量的区别

    宏定义和定义全局变量的区别: 1 作用时间不同. 宏定义在编译期间即会使用并替换,而全局变量要到运行时才可以. 2 本质类型不同. 宏定义的只是一段字符,在编译的时候被替换到引用的位置.在运行中是没有 ...

  4. ATL中宏定义offsetofclass的分析

    近日学习ATL,通过对宏定义offsetofclass的解惑过程.顺便分析下虚函数表,以及通过虚函数表调用函数的问题. 1 解开ATL中宏定义offsetofclass的疑惑 #define _ATL ...

  5. C++中宏的定义与用法(现已被内联函数所代替)

    在noip中,宏还是被经常采用,所以这里讲一下,C++中宏的定义与用法 第一种用法——配合条件编译:#define DEBUG 定义一个叫DEBUG的标识符.它应该与#ifdef或#ifndef配合使 ...

  6. C语言中的调试小技巧

    C语言中的调试小技巧 经常看到有人介绍一些IDE或者像gdb这样的调试器的很高级的调试功能,也听人说过有些牛人做工程的时候就用printf来调试,不用特殊的调试器.特别是在代码经过编译器一些比较复杂的 ...

  7. Handlebars.js循环中索引(@index)使用技巧(访问父级索引)

    使用Handlebars.js过程中,难免会使用循环,比如构造数据表格.而使用循环,又经常会用到索引,也就是获取当前循环到第几次了,一般会以这个为序号显示在页面上. Handlebars.js中获取循 ...

  8. Visual Studio 2015中的常用调试技巧分享

    .NET 技术交流群:337901356 欢迎您的加入! 为什么要学习调试? 调试(Debug)是作为一个程序员必须要学会的东西,学会调试可以极大的提高开发效率,排错时间,很多人不喜欢调试,但我认为这 ...

  9. ACM 做题过程中的一些小技巧。

    ACM做题过程中的一些小技巧. 1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout.cin和printf.scanf最好不要混用. 2.有时候int型不够用,可以用long l ...

随机推荐

  1. http post上传文件

    php.ini中关于文件上传的配置指令: file_uploads = On          //是否接受上传的文件 upload_tmp_dir                //临时文件保持目录 ...

  2. python基础1 - 多文件项目和代码规范

    1. 多文件项目演练 开发 项目 就是开发一个 专门解决一个复杂业务功能的软件 通常每 一个项目 就具有一个 独立专属的目录,用于保存 所有和项目相关的文件 –  一个项目通常会包含 很多源文件 在 ...

  3. 委托+内置委托方法+多播委托+lambda表达式+事件

    委托概念:如果我们要把方法当做参数来传递的话,就要用到委托.简单来说委托是一个类型,这个类型可以赋值一个方法的引用. 声明委托: 在C#中使用一个类分两个阶段,首选定义这个类,告诉编译器这个类由什么字 ...

  4. wpf多程序集之间共享资源字典--CLR名称空间未定义云云

    wpf多程序集之间共享资源字典--CLR名称空间未定义云云 分类: WPF 2012-10-28 10:57 1162人阅读 评论(0) 收藏 举报 以下介绍如何创建可用于在多个程序集之间共享的资源字 ...

  5. python直接赋值,浅拷贝和深拷贝

    本文参考自<Python 直接赋值.浅拷贝和深度拷贝解析> 定义 直接赋值:就是对象的引用(别名) 浅拷贝(copy):拷贝父对象,不拷贝对象内部的子对象 深拷贝(deepcopy):co ...

  6. Alfred 2

    Alfred https://www.alfredapp.com/ Alfred Workflow https://www.alfredapp.com/workflows/ http://www.pa ...

  7. 关闭 Windows Defender

    关闭 Windows Defender Win+R,输入 gpedit.msc 回车,打开组策略编辑器 展开[计算机设置]-[管理模板]-[Windows 组件]-[Windows Defender] ...

  8. 达观数据分析平台架构和Hive实践——TODO

    转自: http://www.infoq.com/cn/articles/hadoop-ten-years-part03 编者按:Hadoop于2006年1月28日诞生,至今已有10年,它改变了企业对 ...

  9. 【Oracle】异常信息的加工处理

    引言     很多时候,我们调用oracle存储过程都会发生各种各样的异常信息,例如ORA-12899值过大,ORA-01400不能插入空值等.虽然说这类异常是前端没控制到位的缘故,但是现实很难100 ...

  10. 分布式_理论_02_Base 理论

    一.前言 五.参考资料 1.分布式理论(二)——Base 理论 2.分布式理论(二) - BASE理论