我有一个我要在RichTextBox
控件中突出显示的单词列表,我知道如何执行此操作但是解析所有内容以分隔单词时会遇到问题。
如何将一行或整个文本解析为单独的单词,然后对其进行枚举并使用RichTextBox.Select()
方法对其进行着色。
这是一个好方法吗?有更好/更快的方式吗?
答案 0 :(得分:2)
您可以使用Avalon Edit代替RichTextBox
,它是免费的。它是#develop中使用的编辑器。我想你可能不得不从#develop源代码下载程序集,但这是值得的。
答案 1 :(得分:2)
使用RichTextBox.Find(String,Int32,Int32,RichTextBoxFinds)方法在控件中查找字符串。然后,您可以通过将“开始”点更改为当前单词之后的点来进行迭代。
不确定这个方案的表现但它会起作用。
答案 2 :(得分:1)
答案 3 :(得分:1)
您可以使用RichTextBox.Find方法在RichTextBox中查找字符串。此方法返回找到的文本的位置。该链接中的代码示例将突出显示该文本。
答案 4 :(得分:1)
可能不是最快的方式,但它有效
首先致电ClearHighLighting
以清除之前,然后致电SetHighLighting
private readonly List<HighLight> _highLights = new List<HighLight>();
private class HighLight
{
public int Start { get; set; }
public int End { get; set; }
}
public void SetHighLighting(string text)
{
// Clear Previous HighLighting
ClearHighLighting();
if (text.Length > 0)
{
int startPosition = 0;
int foundPosition = 0;
while (foundPosition > -1)
{
foundPosition = richTextBox1.Find(text, startPosition, RichTextBoxFinds.None);
if (foundPosition >= 0)
{
richTextBox1.SelectionBackColor = Color.Yellow;
int endindex = text.Length;
richTextBox1.Select(foundPosition, endindex);
startPosition = foundPosition + endindex;
_highLights.Add(new HighLight() { Start = foundPosition, End = endindex });
}
}
}
}
public void ClearHighLighting()
{
foreach (var highLight in _highLights)
{
richTextBox1.SelectionBackColor = richTextBox1.BackColor;
richTextBox1.Select(highLight.Start, highLight.End);
}
_highLights.Clear();
}