Вставка текста в текстовое поле в позиции курсора 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

Заранее благодарим!


person Ben    schedule 15.06.2012    source источник


Ответы (2)


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

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; в этом случае вы можете отключить его для отдельных файлов).

person Konrad Rudolph    schedule 15.06.2012
comment
+1 Ах !, я искал такой ярлык, чтобы избежать Insert, но не нашел подходящего пути. Это действительно хорошо. - person Steve; 15.06.2012

Посмотрите на метод String.Insert, примерно так

MyTextBox.Text = MyTextBox.Text.Insert(intindex, "<End>")
person Mark Hall    schedule 15.06.2012