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

时间:2011-09-22 10:00:53

标签: c# .net winforms richtextbox

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

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

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

我使用的是.NET Framework 4,我用C#编写。

5 个答案:

答案 0 :(得分:1)

试试这段代码:

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

此处白色将成为文本的背景颜色,然后以黄色突出显示

答案 1 :(得分:0)

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

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

但仍然选择了之前的选项。

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

选择一个部分使选择突出显示(稍后取消选择时使其正常)并记录部分开头和&结束指数和第二个和第三个相同......

希望有所帮助

答案 2 :(得分: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),而无需搜索任何突出显示的单词或实现任何其他代码。

再见......

答案 3 :(得分:0)

另一种解决方案是从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;
    }

答案 4 :(得分:-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 编辑2p>

很棒!