我有一个带有 OnChanged 事件的 RichTextBox。OnChanged 事件应查看 RichTextBox 中的每一行,如果该行是素数长度,则将其着色为红色,否则将其着色为黑色。我该怎么做呢?我认为可以从索引 a 到索引 b 进行选择并设置选择颜色,但我认为这会丢失我的光标位置。我如何还保留光标位置?感谢您的任何建议。
问问题
317 次
2 回答
1
查看SelectionStart
并SelectionLength
选择要突出显示的文本。
为了保持光标位置,我认为您可以在开始突出显示之前存储当前SelectionStart
值,然后在完成突出显示后将其重置为该值。
如果用户在您关闭突出显示时继续输入,请小心。您可能必须拦截键盘事件并缓存它们,然后在您将它们重置SelectionStart
到正确的位置后插入它们(或者它可能更容易,虽然不太用户友好,但在你做的时候忽略任何按键突出显示)。
于 2010-10-18T10:25:42.620 回答
0
Private Sub txtKeys_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtKeys.TextChanged
Dim iStart As Int32 = txtKeys.SelectionStart
Dim iPos As Int32 = 0
For Each s As String In Split(txtKeys.Text, vbLf)
If s.Length > 0 Then
txtKeys.Select(iPos, iPos + s.Length)
If isPrime(s.Length) Then
txtKeys.SelectionColor = Color.GreenYellow
Else
txtKeys.SelectionColor = Color.Black
End If
End If
iPos += s.Length + 1
Next
txtKeys.Select(iStart, 0)
End Sub
很抱歉没有评论!我想这在应用于大型 .text 属性时会变得非常低效,但这不是文本框的预期用途。
于 2010-10-18T10:24:29.737 回答