TextBox.AppendText() 不自动滚动

Posted

技术标签:

【中文标题】TextBox.AppendText() 不自动滚动【英文标题】:TextBox.AppendText() not autoscrolling 【发布时间】:2013-08-18 02:46:28 【问题描述】:

我尝试了以下方法让我的文本框文本自动滚动:

我使用的步骤非常简单:

    将文本框拖到表单上。 将文本框更改为多行。 添加垂直滚动。 使用 AppendText() 将文本添加到文本框。

尽管尝试了此处提到的解决方案,但文本不会自动滚动:

How do I automatically scroll to the bottom of a multiline text box?

这是什么原因造成的,我该如何解决?

更新:如果我创建一个按钮并使用它来调用 AppendText() 我会得到所需的行为。但是,如果我尝试从表单的构造函数或 Load() 事件调用 AppendText,那么我会得到附加的文本,但 TextBox 不会滚动。这不是一个重复的问题,因为我过去没有看到有人发布过这个问题。

【问题讨论】:

愿意分享您尝试过的代码吗? 我认为您投了反对票,因为您没有提供任何细节。问题是“解决方案......对我不起作用”。这不是很具有描述性。给我们一个完整的例子来重现问题和它是如何不工作的具体细节。 @Amy 这很简单。我只是调用 myTextBox.AppendText("my text to display") 但它不会自动滚动窗口。我认为这很简单,甚至创建了一个示例程序来证明我没有疯。事实证明,我可以使用按钮单击来附加文本,但如果我尝试从其他地方附加文本,则文本不会自动滚动(请参阅我的问题更新)。 然后尝试Shown事件。 您在寻找已激活的吗? 【参考方案1】:

由于表单在构造函数和加载事件期间还没有完全准备好,我不得不使用一个任务让它在它准备好后滚动:

这里是被调用的方法:

void scroll()

    this.Invoke(new MethodInvoker(delegate()
        
            textBox1.SelectionStart = textBox1.Text.Length;
            textBox1.ScrollToCaret();
        ));

它通过放置在加载事件中的这个任务被调用:

Task task1 = new Task(new Action(scroll));
            task1.Start();

【讨论】:

在表单准备好时执行初始化任务的更简洁的方法:***.com/a/219155/388994 其实不用为它创建任务。在将文本附加到相关文本框的任何位置旁边添加代码块。【参考方案2】:

如果ScrollToCaret()不起作用,您也可以尝试TextBox.ScrollToEnd()功能。

txtBox1.AppendText("somthing");
txtBox1.ScrollToEnd();

【讨论】:

这对我不起作用 - "ScrollToEnd" 不是 TextBox 的方法。我正在使用 C#、Winforms 和 .NET Framework 4.6。

以上是关于TextBox.AppendText() 不自动滚动的主要内容,如果未能解决你的问题,请参考以下文章

追加文本时如何防止文本框自动滚动?

更新UI

笔记本电脑如何实现自动滚屏

滚动条自动上下滚

更新期间停止文本框闪烁

鼠标滚轮自己有时会自动滚的啊