Question

I am trying to work out how I can insert the string "End" into my textbox at a specific cursor point? (where the '???' is in the code below)

As you can see by the code below this will happen when the user clicks return on the keyboard within the textbox.

I have the code to get the cursor index which is being stored as integer 'intcurrentcolumn'.

Thanks

 Private Sub Enter_Click(ByVal Sender As System.Object, ByVal k As System.Windows.Forms.KeyEventArgs)

     Dim MyTextBox As TextBox = sender
     Dim intindex As Integer
     Dim intcurrentcolumn As Integer
     Dim NewString As String

     If k.KeyCode = Keys.Return Then

        k.SuppressKeyPress = True

        intindex = MyTextBox.SelectionStart
        intcurrentColumn = intindex - MyTextBox.GetFirstCharIndexFromLine(intcurrentLine)

        If intindex = MyTextBox.Text.Length Then

         NewString = MyTextBox.Text & "<End>"

        Else: 

        ???

        End If

        MyTextBox.Text = NewString

        'Sets cursor to end of textbox
        MyTextBox.Select(MyTextBox.Text.Length, 0)

      End If

Thanks In Advance !

Was it helpful?

Solution

The String.Insert method works but resets the cursor position which is generally not what you want (although your code resets it afterwards anyway). A better alternative is to just set the SelectedText:

MyTextBox.SelectedText = "<End>"

In your case, the selected text simply has length 0 before you insert the string "<End>".

This also makes the If…Else distinction unnecessary.

Private Sub Enter_Click(ByVal Sender As Object, ByVal k As System.Windows.Forms.KeyEventArgs)
    If k.KeyCode = Keys.Return Then
        Dim MyTextBox As TextBox = DirectCast(sender, TextBox)
        MyTextBox.SelectedText = "<End>"
        MyTextBox.SelectionStart = MyTextBox.Text.Length
        k.SuppressKeyPress = True
    End If
End Sub

Note that I’ve also fixed a bug in your code: the assignment of sender to MyTextBox needs an explicit cast! If your original code compiled, you should (!) set Option Strict On. This is essential for improved type checking by the compiler, and should be seen as an unconditional requirement1.

Furthermore, don’t declare variables before you use them. Declare them at the latest possible point, when you first assign a value to them. This makes the program state easier traceable and often results in shorter code.


1 (unless you work a lot with COM late binding, in which case you can disable it on a per-file base).

OTHER TIPS

Look at the String.Insert Method, something like this

MyTextBox.Text = MyTextBox.Text.Insert(intindex, "<End>")
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top