Monday, November 28, 2005
« Code Snippet Editor for Visual Basic 200... | Main | Best of Freeware »

The following macro will take a private member declaration and turn it into a public property.  It takes into account leading underscores as well as "new" keywords.


Before:

    Private _pageStats As New PageStats

After:

    'PageStats

    Private _pageStats As New PageStats

    Public Property PageStats() As PageStats

        Get

            Return _pageStats

        End Get

        Set(ByVal Value As PageStats)

            _pageStats = Value

        End Set

    End Property

 


Macro:

 

    Sub ConvertFieldToProperty()

        Dim document As TextDocument = DTE.ActiveDocument.Object

        With document.Selection

            'position cursor at beginning of text

            .StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstText)

 

            'move right of scope (e.g. "Private")

            .WordRight()

 

            'check for leading underscore; if exist, delete

            .CharRight(True)

            If .Text = "_" Then

                .Delete()

                .CharRight(True)

            End If

 

            'cap first part of member string (e.g. "MyMember")

            .ChangeCase(vsCaseOptions.vsCaseOptionsUppercase)

 

            'select member without scope (e.g. "myMember as String")

            .EndOfLine(True)

 

            'copy selection

            Dim memberWithNew As String = .Text

            Dim memberWithoutNew As String = memberWithNew.Replace(" New ", " ")

            memberWithoutNew = memberWithoutNew.Replace(" new ", " ")

            .Delete()

 

            'select scope portion

            .StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstText)

 

            'create comment header for property block

            .Text = "'" & memberWithoutNew

            .WordLeft(True, 2)

            .Delete()

            .NewLine()

 

            'replace old scope with new private scope for member

            'and insert lowercase member block

            .WordRight(True)

            .Text = "Private _" & memberWithNew

            .StartOfLine()

            .WordRight()

            .CharRight(True, 2)

            .ChangeCase(vsCaseOptions.vsCaseOptionsLowercase)

            .EndOfLine()

            .NewLine()

 

            'create property block

            .Text = "Public Property " & memberWithoutNew

            .NewLine()

            .Text = "Return _" & memberWithoutNew

            .WordLeft(True, 2)

            .DeleteLeft()

            .WordLeft()

            .CharRight()

            .CharRight(True)

            .ChangeCase(vsCaseOptions.vsCaseOptionsLowercase)

            .LineDown(False, 3)

            .Text = memberWithoutNew

            .WordLeft(True, 2)

            .DeleteLeft()

            .StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstText)

            .Text = "_"

            .CharRight(True)

            .ChangeCase(vsCaseOptions.vsCaseOptionsLowercase)

            .StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstText)

            .EndOfLine()

            .Text = "= Value"

            .LineDown(False, 3)

 

            'select entire block

            .StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstColumn)

            .LineUp(True, 10)

 

            'format block

            DTE.ExecuteCommand("Edit.FormatSelection")

 

            'create a new line at the end and place cursor on following line

            .LineDown()

            .LineUp(False, 2)

            .EndOfLine()

            .NewLine()

            .LineDown()

        End With

    End Sub

Name
E-mail
(will show your gravatar icon)
Home page

Comment (Some html is allowed: a@href@title, b, blockquote@cite, em, i, strike, strong, sub, super, u)  

Enter the code shown (prevents robots):