RichTextBox文本颜色

本文关键字:颜色 文本 RichTextBox | 更新日期: 2023-09-27 18:06:17

我创建了RichTextBox并添加了以下代码:

private void richTextBox1_TextChanged(object sender, EventArgs e)
    {
        //( )
        int selectionStart = richTextBox1.SelectionStart;
        string helpText = richTextBox1.Text;
        int closerPos;
        for (int i = 0; i < helpText.Length; i++)
        {
            if (helpText[i] == '(')
            {
                selectionStart = richTextBox1.SelectionStart;
                closerPos = helpText.Substring(i).IndexOf(')') + i;
                helpText = helpText.Substring(i + 1, closerPos - i - 1);
                richTextBox1.Text = richTextBox1.Text.Remove(i + 1, closerPos - i - 1);

                richTextBox1.Select(i + 1, 0);
                richTextBox1.SelectionColor = Color.Red;
                richTextBox1.SelectedText = helpText;
                richTextBox1.SelectionColor = Color.Black;

                helpText = richTextBox1.Text;
                richTextBox1.SelectionStart = selectionStart;
            }
        }
    }

这段代码应该给()之间的文本上色。例如:

"嗨(需要上色)text (saddsasd) "

()之间的文本需要用红色表示。但只有最后一段文字是上色的。我该怎么修理它?

RichTextBox文本颜色

使用if条件,您只能获得第一个假命题。

尝试拆分文本,如helpText.Split('(');

然后遍历它并执行逻辑。

我认为你不需要逐个字节移动就可以完成这个任务。您可以尝试使用IndexOf方法。

这是我一直在想的事情:

private void richTextBox1_TextChanged(object sender, EventArgs e)
{
    string rbText = richTextBox1.Text;
    int position = 0;
    int startBrace = rbText.IndexOf('(', position) + 1;
    while (startBrace != -1)
    {
        position = rbText.IndexOf(')', startBrace);
        if (position != -1)
        {
             richTextBox1.Select(startBrace, position - startBrace);
             richTextBox1.SelectionColor = Color.Red;
             startBrace = rbText.IndexOf('(', position) + 1;
        }
        else
             break;
    }
}

请记住,我还没有完全测试这段代码。

我已经看到了一个潜在的问题,当helpText只是一个单变量字符串时,它被用作数组。尝试将整个helpText分解为一个字符数组,然后遍历该数组以找到括号。