C# 如何在不移动滚动条/光标的情况下删除RichTextBox的旧数据
我为实时日志创建了一个richtexbox。如果richtexbox的长度太大,我将删除旧数据(例如1/3的当前数据)C# 如何在不移动滚动条/光标的情况下删除RichTextBox的旧数据,c#,.net,winforms,richtextbox,C#,.net,Winforms,Richtextbox,我为实时日志创建了一个richtexbox。如果richtexbox的长度太大,我将删除旧数据(例如1/3的当前数据) 我的问题是,每当我删除数据时,滚动条就会向上(选择文本)向下(添加新文本)。有什么方法可以阻止滚动条上升吗?我在计时器中尝试了这个方法,我觉得很好。很明显,当您删除文本时,滚动条会增长,但这是应该发生的 private void timer1_Tick(object sender, EventArgs e) { richTextBox1.Susp
我的问题是,每当我删除数据时,滚动条就会向上(选择文本)向下(添加新文本)。有什么方法可以阻止滚动条上升吗?我在计时器中尝试了这个方法,我觉得很好。很明显,当您删除文本时,滚动条会增长,但这是应该发生的
private void timer1_Tick(object sender, EventArgs e)
{
richTextBox1.SuspendLayout();
richTextBox1.AppendText( richTextBox1.Text.Length.ToString() +
" some random text of no consequence.....\n");
if (richTextBox1.Text.Length > 10000)
{
richTextBox1.Select(0, 2000);
richTextBox1.SelectedText = "";
}
richTextBox1.SelectionStart = richTextBox1.Text.Length;
richTextBox1.SelectionLength = 0;
richTextBox1.ScrollToCaret();
richTextBox1.ResumeLayout();
}
我假设您总是希望RTB的末端可见,因此您必须将插入符号带到末端并使其可见。如果不这样做,删除文本顶部后,插入符号将位于顶部。。
无需存储插入符号位置,除非您希望插入符号停留在其他位置,可能是因为用户已将插入符号放在那里。。?但是,在这种情况下,您必须相应地采取行动,并计算正确的位置 如果我没有看错你的问题,他的文章可能会有帮助:可能是重复的我不想阻止它滚动到最后一行文本,我只想在删除richtexbox顶部的文本时阻止它滚动到顶部(保持滚动到最后一行)可能
SuspendLayout()
和ResumeLayout()
更改前后是否有帮助?此外,我没有看到您存储和重新计算SelectionStart/End!?当我删除顶部的文本时,滚动条仍然向上。顺便说一句,为什么我需要存储和重新计算SelectionStart/End!?
private void timer1_Tick(object sender, EventArgs e)
{
richTextBox1.SuspendLayout();
richTextBox1.AppendText( richTextBox1.Text.Length.ToString() +
" some random text of no consequence.....\n");
if (richTextBox1.Text.Length > 10000)
{
richTextBox1.Select(0, 2000);
richTextBox1.SelectedText = "";
}
richTextBox1.SelectionStart = richTextBox1.Text.Length;
richTextBox1.SelectionLength = 0;
richTextBox1.ScrollToCaret();
richTextBox1.ResumeLayout();
}