繁体   English   中英

在RichTextBox中更改颜色的问题

[英]Issues changing color in 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);
        }
    }

无需将文本复制到字符串,您可以通过RichTextBox的Find()方法直接使用它:

    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);
    }

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

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;
        }
    }

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

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM