2016-03-05 122 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屬性,它應該很容易修改..

請注意,單詞邊界是用於處理普通文本。您可以自己定義新的規則,以包含或排除您想突出顯示的語言的字符。