ROT13 encoder/decoder This is a simple utility, intended to sit on the desktop for when needed, that does the simple ROT13 encoding and decoding. 

I am used to coding in VBA, and I am interested in more .Net idiomatic coding styles.

Public Class Rot13Decoder

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles txtRotEntry.TextChanged
        lblResult.Text = Rot13(txtRotEntry.Text)
    End Sub

    Function Rot13(Source As String) As String
        Dim i As Long
        Dim result As String = ""

        For i = 0 To Source.Length - 1
            Dim myChar As Char
            myChar = Source.Substring(i, 1)

            Select Case myChar ' originally used Asc(Source(i)), hence the integers below
                Case "a" To "m", "A" To "M" '65 To 77, 97 To 109
                    result &amp;= Chr(Asc(myChar) + 13) 'Chr(Asc(Source(i)) + 13)
                Case "n" To "z", "N" To "Z" '78 To 90, 110 To 122
                    result &amp;= Chr(Asc(myChar) - 13) 'Chr(Asc(Source(i)) - 13)
                Case Else
                    result &amp;= myChar
            End Select
        Next

        Return result
    End Function

    Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.

    End Sub
End Class




(The title of the form says decoder, and I am using it in the example to encode!)

Double clicking on the form result label copies the text to the clipboard for use.
The number one problem here is that you concatenate translated letters on to your string one at a time.  Since strings are immutable in .NET (and most right thinking languages), this means for the first translated character your program allocates space for a new string of length 1 (copying the previous 0-char string), for the second character it allocates space for a new string of length 2 (copying the previous 1-char string), for the third character it allocates space for a new string of length 3 (copying the previous 2-char string), and so on.  The end result is that for an input n characters long, your program will allocate 1 + 2 + 3 + ... + n = \$O(n^2)\$ space and, similarly, perform \$O(n^2)\$ operations!  A better structure is to use a .NET StringBuilder which is designed precisely for this piecemeal kind of string construction.  Using a StringBuilder your program will allocate \$O(n)\$ space and perform \$O(n)\$ operations -- that's a big saving when your input is of any non-trivial length.