假设我有一个RichTextbox,其中包含以下文本:
错误
警告
信息
假设我想将最后一个单词的颜色更改为绿色。
我该怎么做?我确实有一些代码来更改某些文本的颜色(替换功能),但是我只想更改最新行,如果您知道我的意思...
我几乎忘了,这是我用来更改单词颜色的代码:
static void ReplaceText(RichTextBox box, string phrase, Color color)
{
box.HideSelection = true;
int pos = box.SelectionStart;
string s = box.Text;
for (int ix = 0; ; )
{
int jx = s.IndexOf(phrase, ix, StringComparison.CurrentCultureIgnoreCase);
if (jx < 0) break;
box.SelectionStart = jx;
box.SelectionLength = phrase.Length;
box.SelectionColor = color;
ix = jx + 1;
}
box.SelectionStart = pos;
box.SelectionLength = 0;
}
换句话说,我如何只编辑最新行?谢谢!
编辑:顺便说一句!颜色需要保持在那里,这就是控制台输出窗口。
最佳答案
这将为您工作:
public void HighlightLastLine(RichTextBox TextControl, Color HighlightColor)
{
TextControl.Text = TextControl.Text.Trim();
TextControl.SelectionStart = 0;
TextControl.SelectionLength = 0;
TextControl.SelectionColor = Color.Black;
string LastLineText = TextControl.Lines[richTextBox1.Lines.Count() - 1];
int LastLineStartIndex = richTextBox1.Text.LastIndexOf(LastLineText);
TextControl.SelectionStart = LastLineStartIndex;
TextControl.SelectionLength = TextControl.Text.Length - 1;
TextControl.SelectionColor = HighlightColor;
}
用法:
HighlightLastLine(richTextBox1, Color.Indigo);
基本上,我们在这里要做的是先清理一下,然后使用Lines字符串数组选择控件的最后一行。然后,我们获取该字符串的最后一个索引(以防万一,如果有重复的话),我们只是告诉控件从行的开头开始着色,一直到结尾。最后,我们应用在参数中传递的颜色。
编辑:
添加重载将允许自定义文本突出显示,并且如果在ClearColors参数中传递了错误标志,则也不会清除文本。
public void HighlightLastLine(RichTextBox TextControl, string TextToHighlight, Color HighlightColor, bool ClearColors = true)
{
TextControl.Text = TextControl.Text.Trim();
if (ClearColors)
{
TextControl.SelectionStart = 0;
TextControl.SelectionLength = 0;
TextControl.SelectionColor = Color.Black;
}
int LastLineStartIndex = richTextBox1.Text.LastIndexOf(TextToHighlight);
if (LastLineStartIndex >= 0)
{
TextControl.SelectionStart = LastLineStartIndex;
TextControl.SelectionLength = TextControl.Text.Length - 1;
TextControl.SelectionColor = HighlightColor;
TextControl.SelectionStart = 0;
TextControl.SelectionLength = 0;
}
}
用法:
HighlightLastLine(richTextBox1, "Michael Jackson", Color.Indigo, false);
这将尝试查找迈克尔·杰克逊的最后一个索引并为其着色。请注意,在最后一个参数中提供了false,它将保留现有的颜色。