2013-03-27 94 views
-1

我創建的RichTextBox,我添加以下代碼:RichTextBox的文本顏色

private void richTextBox1_TextChanged(object sender, EventArgs e) 
    { 
     //() 
     int selectionStart = richTextBox1.SelectionStart; 
     string helpText = richTextBox1.Text; 
     int closerPos; 

     for (int i = 0; i < helpText.Length; i++) 
     { 
      if (helpText[i] == '(') 
      { 
       selectionStart = richTextBox1.SelectionStart; 
       closerPos = helpText.Substring(i).IndexOf(')') + i; 

       helpText = helpText.Substring(i + 1, closerPos - i - 1); 
       richTextBox1.Text = richTextBox1.Text.Remove(i + 1, closerPos - i - 1); 


       richTextBox1.Select(i + 1, 0); 
       richTextBox1.SelectionColor = Color.Red; 
       richTextBox1.SelectedText = helpText; 
       richTextBox1.SelectionColor = Color.Black; 


       helpText = richTextBox1.Text; 
       richTextBox1.SelectionStart = selectionStart; 
      } 
     } 
    } 

此代碼應上色()之間的文本。 例如:

「嗨(需彩色)文本(sdadsasd)」

之間的()需要以紅色着色的文本。但只有最後一段文字纔會着色。我該如何解決它?

回答

0

你只會得到第一個paranthesis,如果條件。

嘗試分裂樣helpText.Split('(');

的文本,然後遍歷它,做你的邏輯。

+0

爲什麼我需要拆分它? – user2203448 2013-03-27 22:50:42

+0

你必須知道richtextbox文本中有多少()個文本。其實你的代碼首先找到()然後完成。如果你分割它,你可以爲每個()區域執行你的邏輯。 – Xelom 2013-03-27 23:12:02

+0

好吧,但它仍然沒有解釋爲什麼這段代碼無法正常工作。 – user2203448 2013-03-27 23:18:06

0

我認爲你可以做到這一點,而無需逐字節移動字節。您可以嘗試使用IndexOf方法執行此操作。

這是我想的是:

private void richTextBox1_TextChanged(object sender, EventArgs e) 
{ 
    string rbText = richTextBox1.Text; 

    int position = 0; 
    int startBrace = rbText.IndexOf('(', position) + 1; 

    while (startBrace != -1) 
    { 
     position = rbText.IndexOf(')', startBrace); 

     if (position != -1) 
     { 
      richTextBox1.Select(startBrace, position - startBrace); 
      richTextBox1.SelectionColor = Color.Red; 

      startBrace = rbText.IndexOf('(', position) + 1; 
     } 
     else 
      break; 
    } 
} 

請記住,我還沒有完全測試此代碼。

0

我已經看到一個潛在的問題,helpText被用作一個數組時,它只是一個單變量字符串。試着將整個helpText分解成一個char數組,然後通過迭代來找到你的括號。