从richTextBox中的多个位置删除背面颜色

问题描述 投票:1回答:5

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

我找到了两种方法:1。选择所有文本,然后选择背面颜色作为默认颜色。 2.从文本框中删除所有文本,然后再将其放回原处。

两种方式都有效,但使用它们时看起来并不自然。那么,还有另一种方法可以删除文本中的所有重点吗?

我正在使用.NET framework 4,我在C#中编写。

c# .net winforms richtextbox
5个回答
-1
投票

这是用半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=146 Edit2:

工作真棒!


1
投票

试试这段代码:

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

在白色突出显示为黄色之前,白色将是文本的背景颜色


0
投票

您正在寻找的功能是多项选择,例如:

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

但仍然选择了以前的选择。

坏消息是因为多个选择不是richTextBox中的内置函数,但我认为你可能会做一些技巧来实现这个目的:

选择一个部分使选择突出显示(稍后取消选择时使其正常)并记录部分开始和结束索引以及相同的第二个和第三个以及更多...

希望能帮助到你


0
投票

有一个非常简单的解决方案,可以删除您创建的多个高光实例,而不会干扰所有其他高光,其他格式等:

使用其他人可能使用的独特高光颜色,例如

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.FromArgb(255,255,255),而无需搜索任何突出显示的单词或实现任何其他代码。

再见突出......


0
投票

另一种解决方案是从RichTextBox的RTF属性中获取RTF字符串,并使用Regex替换Color Table和Highlight标记。然后,您可以使用剥离的字符串并在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;
    }
© www.soinside.com 2019 - 2024. All rights reserved.