【问题标题】:Selectively coloring text in RichTextBox有选择地为 RichTextBox 中的文本着色
【发布时间】:2010-10-02 03:02:24
【问题描述】:

如何在 RichTextBox 中每次遇到字母“A”时都画成红色?

【问题讨论】:

标签: c# format richtextbox


【解决方案1】:

这是我的包装类中的一个 sn-p 来完成这项工作:

    private delegate void AddMessageCallback(string message, Color color);

    public void AddMessage(string message)
    {
        Color color = Color.Empty;

        string searchedString = message.ToLowerInvariant();

        if (searchedString.Contains("failed")
            || searchedString.Contains("error")
            || searchedString.Contains("warning"))
        {
            color = Color.Red;
        }
        else if (searchedString.Contains("success"))
        {
            color = Color.Green;
        }

        AddMessage(message, color);
    }

    public void AddMessage(string message, Color color)
    {
        if (_richTextBox.InvokeRequired)
        {
            AddMessageCallback cb = new AddMessageCallback(AddMessageInternal);
            _richTextBox.BeginInvoke(cb, message, color);
        }
        else
        {
            AddMessageInternal(message, color);
        }
    }

    private void AddMessageInternal(string message, Color color)
    {
        string formattedMessage = String.Format("{0:G}   {1}{2}", DateTime.Now, message, Environment.NewLine);

        if (color != Color.Empty)
        {
            _richTextBox.SelectionColor = color;
        }
        _richTextBox.SelectedText = formattedMessage;

        _richTextBox.SelectionStart = _richTextBox.Text.Length;
        _richTextBox.ScrollToCaret();
    }

现在您可以使用AddMessage("The command failed") 调用它,让它自动以红色突出显示。或者您可以使用AddMessage("Just a special message", Color.Purple) 调用它来定义特殊颜色(例如,在 catch 块中定义特定颜色很有帮助,而不管消息内容如何)

【讨论】:

    【解决方案2】:

    这是 EJ Brennan 回答的 C# 代码:

    public string Highlight(object Search_Str, string InputTxt, string StartTag, string EndTag) 
    {
        return Regex.Replace(InputTxt, "(" + Regex.Escape(Search_Str) + ")", StartTag + "$1" + EndTag, RegexOptions.IgnoreCase);
    }
    

    【讨论】:

      【解决方案3】:

      试试这个:

      static void HighlightPhrase(RichTextBox box, string phrase, Color color) {
        int pos = box.SelectionStart;
        string s = box.Text;
        for (int ix = 0; ; ) {
          int jx = s.IndexOf(phrase, ix, StringComparison.CurrentCultureIgnoreCase);
          if (jx < 0) break;
          box.SelectionStart = jx;
          box.SelectionLength = phrase.Length;
          box.SelectionColor = color;
          ix = jx + 1;
        }
        box.SelectionStart = pos;
        box.SelectionLength = 0;
      }
      

      ...

      private void button1_Click(object sender, EventArgs e) {
        richTextBox1.Text = "Aardvarks are strange animals";
        HighlightPhrase(richTextBox1, "a", Color.Red);
      }
      

      【讨论】:

        【解决方案4】:

        如果这是您正在寻找的内容,这在您输入时将不起作用,但我使用它来突出显示子字符串:

        Function Highlight(ByVal Search_Str As Object, ByVal InputTxt As String, ByVal StartTag As String, ByVal EndTag As String) As String
            Highlight = Regex.Replace(InputTxt, "(" & Regex.Escape(Search_Str) & ")", StartTag & "$1" & EndTag, RegexOptions.IgnoreCase)
        End Function
        

        这样称呼它:

        Highlight("A", "我所有 A 的颜色都为红色", [span class=highlight]', '[/span]')

        “highlight”类具有您想要的任何颜色编码/格式:

        .highlight {文本装饰:无;颜色:黑色;背景:红色;}

        顺便说一句:您需要将那些方括号更改为有角度的方括号...当我输入它们时它们不会通过...

        【讨论】:

          猜你喜欢
          • 2011-04-15
          • 2017-08-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多