2013-04-04 50 views
0

我正在開發一個使用C#.Net的Windows窗體應用程序。在我的部分代碼中,我定義了一個函數來記錄系統事件。下面是該函數的主體:RichTextBox每行不同的背色

richTextBoxLog.Text += "-"; 
richTextBoxLog.Text += some logs and strings ...; 
richTextBoxLog.Text += "." + new string(' ', 1000) + Environment.NewLine; 
richTextBoxLog.Select(richTextBoxLog.GetFirstCharIndexFromLine(logCounter), richTextBoxLog.Lines[logCounter].Length);  
richTextBoxLog.SelectionBackColor = (logCounter % 2 == 0) ? Color.LightBlue: Color.LightGray; 
logCounter++; 
richTextBoxLog.ScrollToCaret(); 

logCounter的初始值是零(第一事件的行是指​​)。對於奇數行,後面的顏色應該是Color.LightGray,偶數行應該是Color.LightBlue。但是,正如您在下面看到的,它不會正確更改背景顏色。

First Event (Even color) Second Event (Odd color) Third Event (Even color) Fourth Event (Odd color) Fifth Event (Even color)

每次調用該函數(添加新的文本行)的richTextBoxLog.Select的區域根據新生產線的開始和結束的索引更新。但是當一個偶數行被添加到文本框時,所有前面的行的背景顏色變成藍色(甚至是彩色)。

我很感謝你的幫助。

回答

3

文檔http://msdn.microsoft.com/en-us/library/system.windows.forms.richtextbox.selectionbackcolor.aspx狀態:,從這個位置進入

字符有指定的SelectionBackColor。

這似乎很可能會導致您的問題。儘管我仍然無法看到它如何影響以前添加的文本。

richTextBoxLog.Text += "-"; 
richTextBoxLog.Text += some logs and strings ...; 
richTextBoxLog.Text += "." + new string(' ', 1000) + Environment.NewLine; 
var lineCount = 0; 
foreach (var line in richTextBoxLog.Lines) { 
    richTextBoxLog.Select(richTextBoxLog.GetFirstCharIndexFromLine(lineCount), line.Length); 
    richTextBoxLog.SelectionBackColor = (lineCount % 2 == 0) ? Color.LightBlue : Color.LightGray; 
    lineCount++; 
} 
richTextBoxLog.ScrollToCaret(); 
0

應該是有益的:

public void AppendText(string text, Color color,Color backColor) 
    { 
     richTextBox1.SelectionStart = richTextBox1.TextLength; 
     richTextBox1.SelectionLength = 0; 
     richTextBox1.SelectionColor = color; 
     richTextBox1.AppendText(text); 
     richTextBox1.SelectionColor = richTextBox1.ForeColor; 
     richTextBox1.SelectionBackColor = backColor; 
     richTextBox1.ScrollToCaret(); 
    } 

不管怎麼說,你可以通過重新繪製所有線條顏色,當你添加文本解決它