3

我正在尝试弄清楚如何将字符串“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

提前致谢 !

4

2 回答 2

4

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

请注意,我还修复了您代码中的一个错误: to 的分配sender需要MyTextBox转换!如果您的原始代码已编译,您应该(!)设置Option Strict On. 这对于改进编译器的类型检查至关重要,并且应该被视为无条件要求1

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


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

于 2012-06-15T10:14:28.213 回答
1

看看String.Insert方法,像这样

MyTextBox.Text = MyTextBox.Text.Insert(intindex, "<End>")
于 2012-06-15T09:47:48.790 回答