如何在不移动滚动条/光标的情况下删除RichTextBox的旧数据

本文关键字:情况下 删除 RichTextBox 数据 光标 移动 滚动条 | 更新日期: 2023-09-27 18:02:00

我创建了一个richtexbox用于实时日志。如果richtexbox的长度太大,我将删除旧数据(如当前数据的1/3)。

 Content.Invoke(new EventHandler(delegate
            {
               Content.AppendText(msg);   
                if(Content.Text.Length >100000)
                {
                    Content.Select(0, 50000);
                    Content.SelectedText = "";
                }
            }));

我的问题是每当我删除数据,滚动条上升(选择文本)和下降(追加新的文本)。有没有办法防止滚动条上移?

如何在不移动滚动条/光标的情况下删除RichTextBox的旧数据

我在计时器中尝试了这个,它看起来很好。显然,当你删除文本时,滚动条会变大,但这应该发生…

    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的末尾可见,因此您必须将插入符号带到末尾并使其可见。如果你不这样做,插入符号将在删除文本的顶部后出现在顶部。不需要存储插入符号的位置,,除非你想让它留在其他位置,可能是因为用户把它放在那里…?在这种情况下,你必须采取相应的行动,计算正确的位置!

相关文章: