删除RichTextBox行,同时保持C#中剩余行的颜色

时间:2011-09-01 14:09:26

标签: c# colors richtextbox line

考虑一个RichTextBox,它有400行,包含多个不同颜色的单词和行。

是否可以删除此文本框的前100行,同时保留剩余单词的颜色。目前,我使用以下代码删除行,但它无法保留颜色。

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

3 个答案:

答案 0 :(得分:11)

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

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

这样可以保留所有其他行的格式。这可能会导致UI上出现明显的闪烁,您可以通过将{/ 3}}实现Begin / EndUpdate方法来抑制这种情况。

答案 1 :(得分: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表示。处理难度很大的行是第一行,因为它可能在实际的第一行文本之前包含额外的信息。

答案 2 :(得分:0)

.SelectedText =“”在我的应用程序中抛出Windows ding

所以我发现第二个解决方案是使用.Lines属性

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