2016-03-05 108 views
0

所以我想用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"); 
     } 
    } 
} 
+0

您是否试图实现语法高亮?有支持它的控件。使用普通的RichTextBox这是一个真正的痛苦。 –

+0

@SriramSakthivel是的,我试图实现语法突出显示,但不是所有的都是语法 –

+1

请记住,替换函数返回新的字符串。 – Mathijs

回答

0

着色也不是那么难,但定义术语“字”并不那么简单..

下面是两个例子:

我认为你可以用正则表达式生活定义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; 
} 

此功能将设置fore-和背景色在一个RichTextBox给定字的每一次出现。由于我们没有真正修改任何文本,所以它横贯后面的比赛只是为了好的措施,所以字母不会移动;所以我们可以从头到尾循环;但也许你想它适应一天的时间改变的话..

一旦你理解了着色(或以任何其他方式格式)的RTB文字工作的,如何通过即首先选择文字和的一部分,然后更改RTB.SelectedXXX属性,它应该很容易修改..

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