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