2009-08-04 72 views
60

我在C#Forms应用程序上有一个TextBox。我使用表单的Load事件信息填充TextBox。然后我打电话给:滚动到C#文本框的底部

this.txtLogEntries.SelectionStart = txtLogEntries.Text.Length; 
this.txtLogEntries.ScrollToCaret(); 

但是,TextBox不滚动到底部?

虽然这只适用于Load事件。我也从应用程序的其他部分更新这个TextBox,一旦这些事件中的一个更新了TextBox,它就会滚动到底部。

那么,如何预先填充表单加载事件中的TextBox时滚动到底部?

+1

检查 [http://stackoverflow.com/questions/739656/如何-可以-I-滚动到一个指定的行-IN-A-的WinForms-文本框-使用-C](http://stackoverflow.com/questions/739656/how-can-i-scroll-to -a指定行-IN-A-的WinForms-文本框-使用-c)的 – Raghav 2009-08-04 18:10:07

回答

92

尝试把在窗体代码的显示的事件:

private void myForm_Shown(object sender, EventArgs e) 
{ 
    txtLogEntries.SelectionStart = txtLogEntries.Text.Length; 
    txtLogEntries.ScrollToCaret(); 
} 
16

虽然被处理Load事件(示出了表格之前发生),没有形式显示又,因此没有视觉国家已经建立。因此滚动一个不可见的控件很可能不会做任何事情,因为 - 嘿,没有什么可滚动的,因为滚动视口只是控件上的视图,而不是其状态的一部分。

您可能需要与滚动部件移动到Shown事件更成功的形式的(发生之后首先显示的形式)