Visual Studio 中自定义宏生成属性

     之前看到园子里的朋友,写了一个自动生成属性的小工具,可惜操作起来不太方便,要切换窗体。而Visual Studio中自带的自动生成属性的功能不好用,每次只能成生成一个,不能批量。今天在整理以前文档的时候,无意中发现N久之前还是使用VS2003的时候写的一个宏脚本,用来自动生成属性。
Imports  EnvDTE

Imports  System.Diagnostics



Public   Module  CreatePropertyCS



    
Sub  CreatePropertyCS()

        
Dim  selectedText  As  TextSelection  =  DTE.ActiveDocument.Selection

        
Dim  boolWasOpen  As   Boolean

        
Dim  propertyText  As   String

        
Dim  Line  As   String

        
Dim  Lines()  As   String





        
'  if there was nothing selected, grab the entire line

        
If  selectedText.IsEmpty  Then

            selectedText.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstColumn, 
False )

            selectedText.EndOfLine(
True )

        
End   If



        propertyText 
&=  vbNewLine

        propertyText 
&=   " #region Class Property "

        Lines 
=  selectedText.Text.Split(vbNewLine)

        
For   Each  Line  In  Lines

            propertyText 
&=  GetPropertyCodeCS(Line)

        
Next

        propertyText 
&=   " #endregion "

        propertyText 
&=  vbNewLine



        selectedText.EndOfLine()

        selectedText.NewLine()

        selectedText.Insert(propertyText, vsInsertFlags.vsInsertFlagsContainNewText)

        selectedText.SmartFormat()

        selectedText.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstText, 
False )



    
End Sub



    
Private   Function  GetPropertyCodeCS( ByVal  codeLine  As   String As   String

        
Dim  propertyText  As   New  System.Text.StringBuilder

        
Dim  dataType  As   String

        
Dim  originalVarName  As   String

        
Dim  expIndex  As   Integer





        
'  look for anything with a equals in it and truncate beyond that 



        
Dim  chopIndex  As   Integer   =  codeLine.IndexOf( " = " )

        
If  (chopIndex  >   - 1 Then

            codeLine 
=  codeLine.Substring( 0 , chopIndex)

        
End   If





        
'  look for the // style of comments

        chopIndex 
=  codeLine.IndexOf( " // " )

        
If  (chopIndex  >   - 1 Then

            codeLine 
=  codeLine.Substring( 0 , chopIndex)

        
End   If





        
'  look for the /* style of comments starting

        chopIndex 
=  codeLine.IndexOf( " /* " )

        
If  (chopIndex  >   - 1 Then

            codeLine 
=  codeLine.Substring( 0 , chopIndex)

        
End   If





        
'  remove anything that might be left for spaces, etc.

        codeLine 
=  codeLine.Trim()

        
Dim  pieces()  As   String   =  codeLine.Split()

        
If  (pieces.Length  <   2 Then

            
Exit Function

        
End   If





        
'  look for the originalVarName of the variable first (backwards)

        
For  expIndex  =  pieces.Length  -   1   To   0   Step   - 1

            originalVarName 
=  pieces(expIndex).Trim()

            
If  (originalVarName  <>   "" Then

                
Exit   For

            
End   If

        
Next





        
'  remove the trailing semi-colon

        
If  originalVarName.EndsWith( " ; " Then

            originalVarName 
=  originalVarName.Substring( 0 , originalVarName.Length  -   1 )

        
End   If





        
'  now look for the datatype (backwards)

        
For  expIndex  =  expIndex  -   1   To   0   Step   - 1

            dataType 
=  pieces(expIndex).Trim()

            
If  (dataType  <>   "" Then

                
Exit   For

            
End   If

        
Next





        
Dim  newPropertyName  As   String   =  originalVarName

        
If  newPropertyName.StartsWith( " _ " Then

            
'  remove it

            newPropertyName 
=  newPropertyName.Substring( 1 )

        
End   If

        
'  uppercase the first character of the property name

        newPropertyName 
=  newPropertyName.Substring( 0 1 ).ToUpper()  +  newPropertyName.Substring( 1 )





        
'  this builds the text to be converted 

        
'  to make it simple to change, it's done in two steps

        propertyText.Append(vbNewLine)

        propertyText.Append(
" public %%type%% %%varname%% "   +  vbNewLine)

        propertyText.Append(
" { "   +  vbNewLine)

        propertyText.Append(
" get {  "   +  vbNewLine  +   " return %%originalVarName%%; "   +  vbNewLine  +   " "   +  vbNewLine)

        propertyText.Append(
" set {  "   +  vbNewLine  +   " %%originalVarName%% = value;  "   +  vbNewLine  +   " "   +  vbNewLine)

        propertyText.Append(
" } "   +  vbNewLine)



        propertyText.Replace(
" %%type%% " , dataType)

        propertyText.Replace(
" %%originalVarName%% " , originalVarName)

        propertyText.Replace(
" %%varname%% " , newPropertyName)



        
Return  propertyText.ToString()

    
End Function



End Module

创建好宏之后,编译-〉将宏“CreatePropertyCS”按钮拖拉到工具栏中-〉然后用光标全选中字段(如:private int id;)可以选取多行-〉最后点击工具栏中“CreatePropertyCS”按钮,OK搞定!^_^ 快去试试吧!

转载于:https://www.cnblogs.com/Skybobo123/archive/2009/08/29/1556246.html

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计,皆可应用在项目、毕业设计、课程设计、期末/期/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值