【问题标题】:Replace to Colored Text替换为彩色文本
【发布时间】:2016-06-19 10:24:53
【问题描述】:

所以我想使用Text.Replace 函数将非彩色文本替换为彩色文本,但非彩色文本必须是特定单词。 例如。

        private void timer1_Tick(object sender, EventArgs e)
        {
            int index = 0;
            while(index < richTextBox1.Text.LastIndexOf(textBox1.Text))
            {
                richTextBox1.Find("if");
                richTextBox1.Text.Replace("if", Text.Color.DarkGreen "if");
        }
    }
}

【问题讨论】:

  • 您是否正在尝试实现语法高亮?那里有支持它的控件。为此使用普通的 RichTextBox 真的很痛苦。
  • @SriramSakthivel 是的,我正在尝试实现语法高亮,但并非全部都是语法
  • 请记住,替换函数返回新字符串。
  • 我建议您使用任何支持语法高亮的第三方文本框。它们中的大多数使用定义语法突出显示的 xml 文件提供自定义突出显示。其中之一是here 在您最喜欢的搜索引擎中使用关键字“C# Syntax Highlighting Wpf/Winforms/Asp.net”搜索,无论您使用哪种技术
  • 你的目标是什么:Winforms? WPF? ASP? ...?? 总是相应地标记您的问题! - Winforms:这行不通。不仅您不使用 Replace 错误,您也 永远不必更改 RichTextBox 的 Text 属性,否则您会弄乱所有以前的格式。相反,您需要选择一部分,然后更改 SelectedColor!!!

标签: c# text replace colors


【解决方案1】:

着色并不难,但定义“单词”一词并不那么简单..

以下是两者的示例:

我假设您可以接受 word boundaries 的正则表达式定义。您可能需要根据您的需要改进wordPattern,即您的语法! (例如,请参阅here!)

int ColorWord(RichTextBox rtb, string word, Color foreColor, Color backColor)
{
    string wordPattern  = @"\b" + word +  @"\b";
    var matches = Regex.Matches(rtb.Text, wordPattern);

    for (int i = matches.Count - 1; i >= 0; i--)
    {
        var m = matches[i];

        rtb.SelectionStart = m.Index;
        rtb.SelectionLength = m.Length;
        rtb.SelectionColor = foreColor;
        rtb.SelectionBackColor = backColor;
    }

    return matches.Count;
}

此函数将为 RichTextBox 中给定单词的每次出现设置前景色和背景色。它从后面横穿匹配只是为了很好的衡量,因为我们并没有真正修改任何文本,所以字母不会移动;所以我们也可以从头到尾循环;但也许你想改天换词..

一旦您了解了实时出价文本的着色(或以任何其他方式格式化)的工作原理,即首先选择文本的一部分,然后然后更改@987654325 @property,修改应该很简单..

请注意,单词边界适用于普通文本。您可以定义新规则以包含或排除您要突出显示的语言的字符..

【讨论】:

    猜你喜欢
    • 2012-06-06
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 2014-06-05
    • 2010-12-09
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多