【问题标题】:How to apply colour formatting to a Richtextbox *as the user types* (VB.Net)如何将颜色格式应用于 Richtextbox *作为用户类型*(VB.Net)
【发布时间】:2010-10-18 10:05:19
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    如果用户在您关闭突出显示时继续输入,请小心。您可能必须拦截键盘事件并缓存它们,然后在将 SelectionStart 重置到正确位置后插入它们(或者它可能更容易,虽然不太用户友好,但在您忽略任何按键时)正在做高亮显示)。

    【讨论】:

    • 您好,感谢您的回答。我知道它会变得非常繁琐,特别是如果用户选择了一大块文本。出于我的应用程序的目的,我只是假设他们将插入符号放在一个位置,而不是选择一个块。我的解决方案似乎运作良好。谢谢。
    【解决方案2】:
    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
    

    很抱歉缺少 cmets!我想这在应用于大型 .text 属性时会变得非常低效,但这不是文本框的预期用途。

    【讨论】:

      猜你喜欢
      • 2010-09-11
      • 2017-11-20
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      • 2011-07-20
      • 2020-11-20
      • 2010-11-20
      相关资源
      最近更新 更多