2012-06-15 2 views
1

Я пытаюсь выяснить, как я могу вставить строку «Конец» в текстовое поле в определенной точке курсора? (где «???» находится в коде ниже)Вставка текста в текстовое поле в позиции курсора 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 

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

ответ

3

The 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. Это essential для улучшения проверки типа компилятором и должно рассматриваться как безусловное требование. .

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


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

+0

Благодарим за помощь! очень эффективный код. С уважением Ben – Ben

+0

+1 Ah !, Я искал такого рода shorcut, чтобы избежать Вставки, но не смог найти подходящего пути. Это действительно хорошо. – Steve

1

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

MyTextBox.Text = MyTextBox.Text.Insert(intindex, "<End>")