考虑一个RichTextBox,它有400行,包含多个不同颜色的单词和行。
是否可以删除此文本框的前100行,同时保留剩余单词的颜色。目前,我使用以下代码删除行,但它无法保留颜色。
if (rtb.Lines.Count() > 400)
rtb.Lines = rtb.Lines.Skip(100).ToArray();
答案 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);
}