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() 不自动滚动的主要内容,如果未能解决你的问题,请参考以下文章