从richTextBox的多个位置移除背景颜色

本文关键字:背景 颜色 位置 richTextBox | 更新日期: 2023-09-27 18:09:27

我有一个富文本框,并为它实现了一个搜索选项。当用户搜索字符串时,所有匹配项都会以黄色背景突出显示。我希望当用户再次按下搜索按钮时,在新的搜索开始之前,所有以前的高亮显示都将被删除。

我发现了两种方法:1. 选择所有文本,然后选择背景颜色作为默认颜色。2. 从文本框中删除所有文本,然后再放回去。

两种方法都可以,但是当我使用它们时看起来不太自然。那么,有没有其他的方法可以从文本中删除所有高亮?

我使用的是。net framework 4,我用c#编写。

从richTextBox的多个位置移除背景颜色

试试下面的代码:

richTextBox1.SelectAll();
richTextBox1.SelectionBackColor = System.Drawing.Color.White;
richTextBox1.DeselectAll();

这里白色将是文本的背景色,然后用黄色突出显示

您要寻找的功能是多重选择,如:

richTextBox1.Select(4, 5);
richTextBox1.Select(29, 2);
richTextBox1.Select(95, 12);

,但仍然选择前面的选项。

坏消息,因为多重选择不是richTextBox的内置功能,但我认为你可以做一些技巧来实现这一点:

选择一个部分,使所选部分高亮显示(取消选择后正常显示),并记录该部分的开头& &;结束索引和相同的第二,第三和更多…

希望有所帮助

有一个非常简单的解决方案来删除您已经创建的多个突出显示实例,而不会干扰所有其他突出显示,其他格式等:

使用独特的高亮颜色,没有人可能会使用eg

hColor as color = Color.FromArgb(255, 255, 1)

然后从你的richtext中删除该颜色的所有高亮实例,使用:

Dim t As String = TextBox1.Rtf
t = t.Replace("'red255'green255'blue1;", "'red255'green255'blue255;")
TextBox1.Rtf = t

这将用与背景相同的颜色替换您的特殊高亮颜色,在本例中为color。fromarb(255,255,255),而无需搜索任何高亮显示的单词或实现任何其他代码。

再见,高亮…

另一个解决方案是从RichTextBox的RTF属性中获取RTF字符串,并使用Regex替换颜色表和突出显示标签。你可以在RichTextBox中使用剥离的字符串。希望这个简单的帮助方法可以帮助到别人…

   public string StripRTFColor (string RTFString)
    {
        string result = "";
        //                      
        //STRIP COLOUR TABLES   
        //                      
        string regexSearchString = @"'{''colortb.*'}'r'n";
        result = Regex.Replace(RTFString, regexSearchString, "");

        //                      
        //STRIP HIGHLIGHT TAG   
        //                      
        regexSearchString = @"''highlight['d]* ";
        result = Regex.Replace(result, regexSearchString, "");

        return result;
    }

这是用半c#伪代码写的想法,希望能有所帮助

   List<Match> matches = new List<Match> { };

 void Highlight(string SearchString,Color highlightColor)
 {
 foreach (var match in matches)
 {
 UpdateMatchBgColor(richTextBox1,match.pos,match.length,match.color);
 }
 matches = SearchMatches(SearchString);
 foreach (var match in matches)
 {
 UpdateMatchBgColor(richTextBox1,match.pos,match.length,highlightColor);
 }
 }

编辑:尝试:http://www.dotnetcurry.com/ShowArticle.aspx?ID=146Edit2:

作品太棒了!