我想弄清楚如何在特定的光标点将字符串“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
提前致谢!
答案 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
请注意,我还修复了代码中的错误:sender
到MyTextBox
的分配需要显式投射!如果编译了原始代码,则应该(!)设置Option Strict On
。这是必需的,用于改进编译器的类型检查,应该被视为无条件的要求 1 。
此外,在使用变量之前不要声明变量。当您第一次为它们分配值时,在最新的可能点声明它们。这使得程序状态更容易跟踪,并且通常会导致代码更短。
1 (除非您使用COM后期绑定工作很多,在这种情况下,您可以在每个文件的基础上禁用它。)
答案 1 :(得分:1)
查看String.Insert方法,类似这样
MyTextBox.Text = MyTextBox.Text.Insert(intindex, "<End>")