将文本插入光标位置VB的文本框中

时间:2012-06-15 09:38:44

标签: vb.net cursor-position

我想弄清楚如何在特定的光标点将字符串“End”插入到我的文本框中? (其中'???'在下面的代码中)

正如您在下面的代码中看到的那样,当用户在文本框中点击键盘上的返回时,就会发生这种情况。

我有代码来获取存储为整数'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 个答案:

答案 0 :(得分:4)

String.Insert方法有效但重置光标位置通常不是您想要的(尽管您的代码无论如何都会重置它)。更好的选择是设置SelectedText

MyTextBox.SelectedText = "<End>"

在您的情况下,在插入字符串"<End>"之前,所选文本的长度为0。

这也使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

请注意,我还修复了代码中的错误:senderMyTextBox的分配需要显式投射!如果编译了原始代码,则应该(!)设置Option Strict On。这是必需的,用于改进编译器的类型检查,应该被视为无条件的要求 1

此外,在使用变量之前不要声明变量。当您第一次为它们分配值时,在最新的可能点声明它们。这使得程序状态更容易跟踪,并且通常会导致代码更短。


1 (除非您使用COM后期绑定工作很多,在这种情况下,您可以在每个文件的基础上禁用它。)

答案 1 :(得分:1)

查看String.Insert方法,类似这样

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