2012-08-12 50 views
1

讓我們說我有一個包含以下文本在RichTextBox:RichTextBox的最新行

錯誤
警告
信息

而且我們說,我想最後一個字的顏色變爲綠色。
我該怎麼做?我確實有一些代碼來改變一些文本的顏色(一種替換功能),但我想要的只是如果你知道我的意思,只更改最新行...

我差點忘了,這裏是代碼我用來改變這個詞的顏色:

static void ReplaceText(RichTextBox box, string phrase, Color color) 
    { 
     box.HideSelection = true; 
     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; 
    } 

換句話說,我該如何編輯最新的行?謝謝!

編輯:順便說一句!顏色需要留在那裏,讓我們說一個控制檯輸出窗口。

+0

所以你會不會劈在新的生產線,找出有多少數組中,拿到最後一個那麼就根據你的膚色邏輯是什麼? – 2012-08-12 02:44:30

回答

3

這會爲你工作:

public void HighlightLastLine(RichTextBox TextControl, Color HighlightColor) 
{ 
    TextControl.Text = TextControl.Text.Trim(); 
    TextControl.SelectionStart = 0; 
    TextControl.SelectionLength = 0; 
    TextControl.SelectionColor = Color.Black; 
    string LastLineText = TextControl.Lines[richTextBox1.Lines.Count() - 1]; 
    int LastLineStartIndex = richTextBox1.Text.LastIndexOf(LastLineText); 
    TextControl.SelectionStart = LastLineStartIndex; 
    TextControl.SelectionLength = TextControl.Text.Length - 1; 
    TextControl.SelectionColor = HighlightColor; 
} 

用法:

HighlightLastLine(richTextBox1, Color.Indigo); 

基本上,我們這裏做的是做一些清理,然後再使用選擇控制的最後一行行字符串數組。然後我們得到該字符串的最後一個索引(因爲我們有重複),並且我們只是告訴控件從行首開始着色,直到結束。最後,我們應用參數中傳遞的顏色。

編輯:

添加的過載,將允許自定義文本的亮點,也不會清除文本如果ClearColors參數傳遞一個錯誤的標誌。

public void HighlightLastLine(RichTextBox TextControl, string TextToHighlight, Color HighlightColor, bool ClearColors = true) 
    { 
     TextControl.Text = TextControl.Text.Trim(); 
     if (ClearColors) 
     { 
      TextControl.SelectionStart = 0; 
      TextControl.SelectionLength = 0; 
      TextControl.SelectionColor = Color.Black; 
     } 
     int LastLineStartIndex = richTextBox1.Text.LastIndexOf(TextToHighlight); 
     if (LastLineStartIndex >= 0) 
     { 
      TextControl.SelectionStart = LastLineStartIndex; 
      TextControl.SelectionLength = TextControl.Text.Length - 1; 
      TextControl.SelectionColor = HighlightColor; 
      TextControl.SelectionStart = 0; 
      TextControl.SelectionLength = 0; 
     } 
    } 

用法:

HighlightLastLine(richTextBox1, "Michael Jackson", Color.Indigo, false); 

這將試圖找到邁克爾·傑克遜的最後一個索引和着色它。請注意,在最後一個參數中會提供一個錯誤,以允許保留現有的顏色。

+0

爲什麼使用第一個字母的大寫參數名稱......看到像這樣寫的C#代碼是非常令人困惑的。 – 2012-08-12 03:01:50

+0

好吧,它確實推動了我的正確方式:),還有一個問題:當我只想改變一行中的一個單詞時,我該如何做到這一點,讓我們假設該行包含這個:'This is a phone' then我希望電話這個詞是紅色的,我該怎麼做?並保持文本框中的顏色? – 2012-08-12 03:05:17

+0

已編輯。再次看到我的帖子。 – DelegateX 2012-08-12 03:17:06

1

Thanks DelegateX!這個工作對我來說...

public void HighlightLastLine(RichTextBox rtb1, Color fgColour) 
    { 
     if (rtb1.Text != "") 
     { 
      // Cleanup leading/trailing whitespace 
      rtb1.Text = rtb1.Text.Trim(); 
      rtb1.SelectionStart = 0; 
      rtb1.SelectionLength = 0; 
      rtb1.SelectionColor = Color.Black; 
      // Get index of first char on last line 
      string LastLineText = rtb1.Lines[rtb1.Lines.Count() - 1]; 
      int LastLineStartIndex = rtb1.Text.LastIndexOf(LastLineText); 
      // Set selection 
      rtb1.SelectionStart = LastLineStartIndex; 
      rtb1.SelectionLength = rtb1.Text.Length; 
      // Change colour 
      rtb1.SelectionColor = fgColour; 
     } 
    }