Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不移动滚动条/光标的情况下删除RichTextBox的旧数据_C#_.net_Winforms_Richtextbox - Fatal编程技术网

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

C# 如何在不移动滚动条/光标的情况下删除RichTextBox的旧数据,c#,.net,winforms,richtextbox,C#,.net,Winforms,Richtextbox,我为实时日志创建了一个richtexbox。如果richtexbox的长度太大,我将删除旧数据(例如1/3的当前数据) 我的问题是,每当我删除数据时,滚动条就会向上(选择文本)向下(添加新文本)。有什么方法可以阻止滚动条上升吗?我在计时器中尝试了这个方法,我觉得很好。很明显,当您删除文本时,滚动条会增长,但这是应该发生的 private void timer1_Tick(object sender, EventArgs e) { richTextBox1.Susp

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


我的问题是,每当我删除数据时,滚动条就会向上(选择文本)向下(添加新文本)。有什么方法可以阻止滚动条上升吗?

我在计时器中尝试了这个方法,我觉得很好。很明显,当您删除文本时,滚动条会增长,但这是应该发生的

    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();
    }