Вставка текста в текстовое поле в позиции курсора VB

Я пытаюсь понять, как я могу вставить строку "Конец" в мое текстовое поле в определенной точке курсора? (где '???' в коде ниже)

Как видно из приведенного ниже кода, это произойдет, когда пользователь нажимает кнопку возврата на клавиатуре в текстовом поле.

У меня есть код для получения указателя курсора, который хранится как целое число 'intcurrentcolumn'.

Спасибо

 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

Заранее спасибо!

2 ответа

Решение

String.Insert Метод работает, но сбрасывает позицию курсора, что обычно не то, что вы хотите (хотя ваш код впоследствии сбрасывает его). Лучшая альтернатива - просто установить SelectedText:

MyTextBox.SelectedText = "<End>"

В вашем случае выделенный текст просто имеет длину 0, прежде чем вставить строку "<End>",

Это также делает If…Else различие ненужное.

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

Обратите внимание, что я также исправил ошибку в вашем коде: назначение sender в MyTextBox нуждается в явном приведении! Если ваш оригинальный код скомпилирован, вы должны (!) Установить Option Strict On, Это важно для улучшенной проверки типов компилятором и должно рассматриваться как безусловное требование 1.

Кроме того, не объявляйте переменные, прежде чем использовать их. Объявите их в самый последний момент, когда вы впервые назначите им значение. Это облегчает отслеживание состояния программы и часто приводит к сокращению кода.


1 (если вы не много работаете с поздним связыванием COM, в этом случае вы можете отключить его для отдельных файлов).

Посмотрите на метод String.Insert, что-то вроде этого

MyTextBox.Text = MyTextBox.Text.Insert(intindex, "<End>")
Другие вопросы по тегам