У меня есть RichTextBox с событием OnChanged. Событие OnChanged должно просматривать каждую строку в RichTextBox и, если строка имеет основную длину, окрашивать ее в красный цвет, в противном случае — в черный. Как мне это сделать? Я думаю, что можно выбрать от индекса a до индекса b и установить цвет выделения, но я думаю, что это потеряет позицию курсора. Как мне также сохранить положение курсора? Спасибо за любые предложения.
Как применить цветовое форматирование к Richtextbox *по мере ввода пользователем* (VB.Net)
Ответы (2)
Посмотрите на SelectionStart
и SelectionLength
, чтобы выбрать текст для выделения.
Чтобы сохранить положение курсора, я думаю, вы можете просто сохранить текущее SelectionStart
перед тем, как начать выделение, а затем сбросить его до этого значения после того, как вы закончили выделение.
Просто будьте осторожны, если пользователь продолжает печатать, пока вы не выделяете. Вам, вероятно, придется перехватывать события клавиатуры и кэшировать их, а затем вставлять их после сброса SelectionStart
в правильное место (или может быть проще, хотя и менее удобно для пользователя, просто игнорировать любые нажатия клавиш, пока вы делаете выделение).
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, но это не предполагаемое использование текстового поля.