【问题标题】:Issues changing color in richtextbox在richtextbox中更改颜色的问题
【发布时间】:2015-07-08 15:31:32
【问题描述】:

我正在尝试遍历 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);
        }
    }

【问题讨论】:

    标签: c# richtextbox


    【解决方案1】:

    您可以通过其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);
        }
    

    【讨论】:

    • 这对于扩展多个选择也非常有效。太糟糕了 stackoverflow 不允许两个正确的答案,因为这个和 Frederick Grumieaux 发布的一个都有效。这个在某种程度上更干净。
    【解决方案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;
            }
        }
    

    【讨论】:

      【解决方案3】:

      如果你喜欢突出语法,我建议使用FastColoredTextBox 控件:

      【讨论】:

        猜你喜欢
        • 2017-11-20
        • 2010-11-06
        • 2016-09-01
        • 1970-01-01
        • 2014-03-13
        • 2012-07-28
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        相关资源
        最近更新 更多