突出显示(选择)RichTextBox中的文本,而不会影响当前的.SelectionBackColor或.SelectionColor

时间:2019-07-08 15:18:13

标签: richtextbox highlight

我希望能够在不影响当前.SelectionBackColor或.SelectionColor的情况下突出显示(选择)RichTextBox中的文本

我有一个RichTextBox,其中包含很多文本。

我有一个ListView,其中包含在ListView中具有不同.BackColor和.ForeColor的字符串/单词的列表。

我遍历ListView项,并使用.SelectionBackColor和.SelectionColor设置文本颜色以匹配ListView中的.BackColor和.ForeColor,突出显示RichTextBox中的相应文本。

For Each verItem As ListViewItem In lvVer.Items
    startindex = 0

    While startindex < rtbMain.TextLength
        Dim wordStartIndex As Integer = rtbMain.Find(verItem.Text, startindex, RichTextBoxFinds.None)

        If wordStartIndex <> -1 Then
            rtbMain.SelectionStart = wordStartIndex
            rtbMain.SelectionLength = verItem.Text.Length
            rtbMain.SelectionBackColor = verItem.BackColor
            rtbMain.SelectionColor = verItem.ForeColor
        Else
            Exit While
        End If

        startindex += wordStartIndex + verItem.Text.Length

    End While
Next

这一切都很好,但是我希望能够在列表视图中选择一个项目,然后在RichTextBox中以标准突出显示(蓝色背景,白色文本)颜色突出显示匹配的文本对象,同时仍然保留下面的原始颜色

如果我使用鼠标突出显示RichTextBox中的文本,它会以通常的Windows方式(蓝色背景,白色文本)暂时突出显示。如果再在RichTextBox中的其他位置单击鼠标,则在字符串上设置的原始颜色仍然存在。我想在代码中复制这种行为。

如果通过代码rtbMain.Select(wordStartIndex, verItem.Text.Length)“选择”文本,则该文本不会突出显示。它甚至也没有在视觉上被选中。显然,我可以设置一个新的.SelectionBackColor和.SelectionColor,但是那样我会丢失原来的颜色。

是否可以通过编程方式在RichTextBox文本上滚动鼠标,并选择并突出显示文本而不会影响基本的原始颜色?

1 个答案:

答案 0 :(得分:0)

我找到的答案虽然很简单,但并不明显。

我必须将RichTextBox HideSelection属性设置为False。我知道,当您知道该属性存在时,这是显而易见的,但是,即使将其设置为false,当我双击一个单词或在其上滚动鼠标时,该选择也是可见的?当我在代码中进行操作时,它只是不可见。