突出显示(选择)多行TextBox中的最后一行文本。

问题描述 投票:1回答:1

我希望我的程序能够自动选择多行TextBox中的最后一行文本。我试过以下代码来选择TextBox中的第一行。

Private Sub TextBoxLog_TextChanged(sender As Object, e As EventArgs) Handles TextBoxLog.TextChanged
   Dim Line As Integer = TextBoxLog.GetLineFromCharIndex(TextBoxLog.Lines.GetLowerBound(0))
   Dim lineLength As Integer = TextBoxLog.Lines(Line).Length
   TextBoxLog.SelectionStart = TextBoxLog.GetLineFromCharIndex(Line)
   TextBoxLog.SelectionLength = lineLength
End Sub

如何修改上面的代码,使最后一行的文字在改变时被自动选择?我想我只需要修改上面代码片段中的第二行就可以了。

注意 TextBox被设置为只读,通过点击Button来填充文本。

vb.net winforms textbox
1个回答
1
投票

你可以使用

  • GetLineFromCharIndex() 获取最后一行的索引,以文本长度为参考。
  • GetFirstCharIndexFromLine()传递从上一次调用中收到的行号,获取该行中第一个字符的索引。
  • 召唤 选择() 来选择文本,从最后一行的第一个字符索引开始,到文本的长度,减去起始位置。

使用这种形式的选择,当控件不包含任何文本时(即文本是空字符串时),你就不会出现异常。同时,您还可以避免使用 线路 属性:这个值没有被缓存,所以每次使用时都需要对它进行评估,解析--每次--TextBoxBase控件的全部内容。


Private Sub TextBoxLog_TextChanged(sender As Object, e As EventArgs) Handles TextBoxLog.TextChanged
    Dim tBox = DirectCast(sender, TextBoxBase)
    Dim lastLine As Integer = tBox.GetLineFromCharIndex(tBox.TextLength)
    Dim lineFirstIndex As Integer = tBox.GetFirstCharIndexFromLine(lastLine)
    tBox.Select(lineFirstIndex, tBox.TextLength - lineFirstIndex)
End Sub

► 由于您使用Button向TextBox控件添加文本,因此我建议将TextBoxRichTextBox的 隐藏选择 属性为 False否则,你可能无法实际看到所选的文本。如果你不喜欢有 HideSelection 设置为False,那么你需要调用 [TextBox].Focus()在Button.Click处理程序中,可以看到高亮显示的文本。

在这里,我正在铸造 senderTextBoxBase (Dim tBox = DirectCast(sender, TextBoxBase)),所以你可以在不改变控件名称的情况下将此方法应用于任何其他TextBox或RichTextBox。

  • TextBox和RichTextBox类都是从TextBoxBase派生出来的,所以这两类的代码都可以使用。
  • sender 参数代表引发事件的Control。
© www.soinside.com 2019 - 2024. All rights reserved.