2011-09-01 77 views
3

考虑一个RichTextBox,它具有400行,并且包含许多不同颜色的单词和行。删除RichTextBox行,同时保持C#中剩余行的颜色

是否可以删除此文本框的前100行,而剩余单词的颜色是保留的。目前,我正在使用下面的代码删除线条,但它不能保持颜色。

if (rtb.Lines.Count() > 400) 
    rtb.Lines = rtb.Lines.Skip(100).ToArray(); 

回答

9

使用SelectionText属性。首先选择要删除的行,然后通过将SelectionText设置为空字符串来删除它们。像这样:

richTextBox1.SelectionStart = 0; 
    richTextBox1.SelectionLength = richTextBox1.GetFirstCharIndexFromLine(200); 
    richTextBox1.SelectedText = ""; 

这保留了所有其他行的格式。这可能会导致UI上出现可见的闪烁,您可以通过将开始/结束更新方法实施为shown here来抑制该闪烁。

+0

是高贵和简洁的方式比更好的解析RTF。奖励! – pstrjds

+1

此解决方案的工作原理是将richTextBox1.ReadOnly设置为false。如果没有,它什么都不做。 –

1

如果要保留格式设置,则不能使用Lines属性。 Lines源自TextBoxBase。您需要使用Rtf属性,并在您回来的字符串中解析自己的行。如果你想刚才得到的行数,然后解析RTF,那么你可以这样做:

// NOTE: I am using Length rather than Count() because the array already knows its length 
if (rtb.Lines.Length > 400) 
{ 
    // Parse the rtf here to remove the unwanted lines and preserve the format 
} 

您需要看RTF specification准确地拉出实际线。换行符由标签\par表示。该行处理起来会非常棘手,因为它可能在实际的第一行文本之前包含额外的信息。

0

.SelectedText =“我的应用”抛出一个Windows丁

于是我找到了第二个解决方案是.Lines财产发挥

if (nbLines > maxLines) 
{ 
    Array.Copy(rtfBox.Lines, 1, 
       rtfBox.Lines, 0, rtfBox.Lines.Length - 1); 
}