我有一个富文本框,我已经为它实现了一个搜索选项。当用户搜索字符串时,所有匹配都以黄色背景突出显示。我希望当用户再次按下搜索按钮时,在新搜索开始之前将删除所有先前的高亮显示。
我找到了两种方法:1。选择所有文本,然后选择背面颜色作为默认颜色。 2.从文本框中删除所有文本,然后再将其放回原处。
两种方式都有效,但使用它们时看起来并不自然。那么,还有另一种方法可以删除文本中的所有重点吗?
我正在使用.NET framework 4,我在C#中编写。
这是用半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:
工作真棒!
试试这段代码:
richTextBox1.SelectAll();
richTextBox1.SelectionBackColor = System.Drawing.Color.White;
richTextBox1.DeselectAll();
在白色突出显示为黄色之前,白色将是文本的背景颜色
您正在寻找的功能是多项选择,例如:
richTextBox1.Select(4, 5);
richTextBox1.Select(29, 2);
richTextBox1.Select(95, 12);
但仍然选择了以前的选择。
坏消息是因为多个选择不是richTextBox中的内置函数,但我认为你可能会做一些技巧来实现这个目的:
选择一个部分使选择突出显示(稍后取消选择时使其正常)并记录部分开始和结束索引以及相同的第二个和第三个以及更多...
希望能帮助到你
有一个非常简单的解决方案,可以删除您创建的多个高光实例,而不会干扰所有其他高光,其他格式等:
使用其他人可能使用的独特高光颜色,例如
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),而无需搜索任何突出显示的单词或实现任何其他代码。
再见突出......
另一种解决方案是从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;
}