-1

我创建了 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;
            }
        }
    }

此代码应为 ( ) 之间的文本着色。例如:

“嗨(需要着色)文本(sdadsasd)”

( ) 之间的文本需要用红色着色。但只有最后一个文本是彩色的。我该如何解决?

4

3 回答 3

0

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

于 2013-03-28T00:30:56.427 回答
0

如果条件,您只会得到第一个括号。

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

然后迭代它并执行您的逻辑。

于 2013-03-27T22:48:46.167 回答
0

我认为您可以在不逐字节移动的情况下完成此操作。您可以尝试使用 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;
    }
}

请记住,我尚未完全测试此代码。

于 2013-03-27T23:24:03.590 回答