如何在用户输入*(VB.Net)时将颜色格式应用于Richtextbox *

时间:2010-10-18 10:05:20

标签: .net vb.net conditional-formatting text-formatting

我有一个带有OnChanged事件的RichTextBox。 OnChanged事件应该查看RichTextBox中的每一行,如果该行的长度为黄色,则为红色,否则为黑色。我该怎么做呢?我认为可以从索引a到索引b进行选择并设置选择颜色,但我认为这将失去我的光标位置。我如何保留光标位置?感谢您的任何建议。

2 个答案:

答案 0 :(得分:1)

查看SelectionStartSelectionLength以选择要突出显示的文字。

要保持光标位置,我认为您可以在开始突出显示之前存储当前SelectionStart,然后在完成突出显示后将其重置为该值。

但是,如果用户在您突出显示时继续输入,请注意。您可能必须拦截键盘事件并缓存它们,然后在将SelectionStart重置到正确的位置后插入它们(或者可能更容易,尽管用户不太友好,只需忽略任何按键你正在做突出显示。)

答案 1 :(得分: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属性时会变得非常低效,但这不是文本框的预期用途。