【问题标题】:RichTextBox text colorRichTextBox 文本颜色
【发布时间】:2013-03-28 08:30:56
【问题描述】:

我创建了 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)”

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

【问题讨论】:

    标签: c# forms richtextbox


    【解决方案1】:

    你只会得到第一个带有 if 条件的括号。

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

    然后对其进行迭代并执行您的逻辑。

    【讨论】:

    • 为什么需要拆分?
    • 你必须知道richtextbox的文本中有多少()个文本。实际上,您的代码首先找到 () 然后完成。如果你拆分它,你可以为每个 () 区域执行你的逻辑。
    • 好的,但仍然不能解释为什么这段代码不起作用。
    【解决方案2】:

    我认为您无需逐字节移动即可完成此操作。您可以尝试使用 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;
        }
    }
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-04
        • 2013-10-25
        • 2011-07-20
        • 2011-02-01
        相关资源
        最近更新 更多