从richTextBox的多个位置移除背景颜色
本文关键字:背景 颜色 位置 richTextBox | 更新日期: 2023-09-27 18:09:27
我有一个富文本框,并为它实现了一个搜索选项。当用户搜索字符串时,所有匹配项都会以黄色背景突出显示。我希望当用户再次按下搜索按钮时,在新的搜索开始之前,所有以前的高亮显示都将被删除。
我发现了两种方法:1. 选择所有文本,然后选择背景颜色作为默认颜色。2. 从文本框中删除所有文本,然后再放回去。
两种方法都可以,但是当我使用它们时看起来不太自然。那么,有没有其他的方法可以从文本中删除所有高亮?
我使用的是。net framework 4,我用c#编写。
试试下面的代码:
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:
作品太棒了!