在richtextbox中更改颜色的问题

时间:2015-07-08 15:31:32

标签: c# richtextbox

我正在尝试迭代Richtextbox中的一些预先输入的文本,并根据其前缀将特定单词/行的颜色更改为颜色,到目前为止,不同的前缀是[b],[f]和[E]。在这个例子中我只使用[b]。我尝试过使用while / foreach循环,但它们似乎没有遍历文本。下面是我最接近它的工作,但它只适用于第一行文本。有人有机会指出我正确的方向吗?

 private void AboutBox_Load(object sender, EventArgs e)
    {
        textBox1.Select(0, 0);
        using (StringReader reader = new StringReader(richTextBox1.Text))
        {
            string line = string.Empty;
            do
            {
                line = reader.ReadLine();

                if ((line != null && line.Contains("[b]")))
                  {
                      richTextBox1.Select(richTextBox1.Text.IndexOf("[b]"), "[b]".Length);
                      richTextBox1.SelectionColor = Color.Green;
                  }
            } while (line != null);
        }
    }

3 个答案:

答案 0 :(得分:3)

不是将文本复制到字符串,而是可以通过Find()方法直接使用RichTextBox:

    void AboutBox_Load(object sender, EventArgs e)
    {
        this.ColorPrefix(richTextBox1, "[b]", Color.Green);
        this.ColorPrefix(richTextBox1, "[f]", Color.Red); // change the color!
        this.ColorPrefix(richTextBox1, "[e]", Color.Yellow); // change the color!
    }

    private void ColorPrefix(RichTextBox rtb, string prefix, Color color)
    {
        int position = 0, index = 0;
        while ((index = rtb.Find(prefix, position, RichTextBoxFinds.None)) >= 0)
        {
            rtb.Select(index, prefix.Length);
            rtb.SelectionColor = color;
            position = index + 1;
        }
        rtb.Select(rtb.TextLength, 0);
    }

答案 1 :(得分:2)

此行将始终选择相同的项目:

richTextBox1.Select(richTextBox1.Text.IndexOf("[b]"), "[b]".Length);

所以我会建议这样的事情:

    private void AboutBox_Load(object sender, EventArgs e)
    {
        string text = richTextBox1.Text;
        int position = 0, index = 0;
        while ((index = text.IndexOf("[b]", position)) >= 0)
        {
            richTextBox1.Select(index, 3);
            richTextBox1.SelectionColor = Color.Green;
            position = index + 1;
        }
    }

答案 2 :(得分:0)

如果您想突出显示语法,我建议使用FastColoredTextBox控件:

enter image description here