假设我有一个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,它将保留现有的颜色。

10-05 18:55