我的程序调用Java,然后将stdout重定向到RichTextBox
。我的问题是每次写入数据时,垂直滚动条总是停留在方框的顶部。将新数据写入到底部时,富文本框滚动到底部
即使您滚动到底部,一旦写入新数据,它就会到达顶部。我想相反。
因此,当写入新数据时,它停留在底部。我怎样才能做到这一点?
我的程序调用Java,然后将stdout重定向到RichTextBox
。我的问题是每次写入数据时,垂直滚动条总是停留在方框的顶部。将新数据写入到底部时,富文本框滚动到底部
即使您滚动到底部,一旦写入新数据,它就会到达顶部。我想相反。
因此,当写入新数据时,它停留在底部。我怎样才能做到这一点?
是的,你可以使用ScrollToCaret()
方法:
// bind this method to its TextChanged event handler:
// richTextBox.TextChanged += richTextBox_TextChanged;
private void richTextBox_TextChanged(object sender, EventArgs e) {
// set the current caret position to the end
richTextBox.SelectionStart = richTextBox.Text.Length;
// scroll it automatically
richTextBox.ScrollToCaret();
}
我想通了。由于某些原因,在VS 2010中,我不得不点击富文本框,然后点击事件,然后找到TExted并将其链接到“myrichTextBox_TextChanged”。有用的原因。 – user1158745 2012-02-23 19:41:23
由于某些原因,Visual Studio 2017不提供此属性作为选项。这是否被弃用? – SubjectX 2017-07-13 16:26:51
@SubjectX该文档声明它在当前版本的.Net框架中仍然可用。 – 2017-07-14 19:38:53
如果RichTextBox具有焦点并且使用AppendText添加信息,则RichTextBox将保持滚动到最后。如果您将HideSelection设置为False,它会在失去焦点并保持自动滚动时保持其选择状态。
我设计了一个使用下面方法的Log Viewer GUI。它用完了一个完整的核心。摆脱这个代码,并设置HideSelection为False得到了CPU使用率下降到1-2%
//Don't use this!
richTextBox.AppendText(text);
richTextBox.ScrollToEnd();
这是为WPF RichTextBox。 'ScrollToEnd()'不是WinForms版本可用的方法。 – 2014-08-20 19:54:06
它继承自ScrollToEnd()' – DrWu 2014-09-03 22:58:46
的TextBoxBase我没有在['System.Windows.Forms.TextBoxBase'](http://msdn.microsoft.com/en-us/)的文档中看到它。 library/system.windows.forms.textboxbase(v = vs.110).aspx),它由['RichTextBox'](http://msdn.microsoft.com/en-us/library/system.windows。 forms.richtextbox(v = vs.110).aspx)for WinForms。 – 2014-09-04 03:25:38
倒未玷污革新面值为例=>
namespace SongTabs
{
public class RichTextBoxAutoScroll
{
protected int LineJump { get; set; }
protected int ActualLine = 1;
Timer Timer { get; set; }
RichTextBox RichTextBox { get; set; }
public RichTextBoxAutoScroll(RichTextBox rtb,int speed,int linejump)
{
this.LineJump = linejump;
this.RichTextBox = rtb;
this.Timer = new Timer();
this.Timer.Interval = speed;
this.Timer.Tick += Timer_Tick;
}
void Timer_Tick(object sender, EventArgs e)
{
RichTextBox.SelectionStart = RichTextBox.GetFirstCharIndexFromLine(ActualLine);
RichTextBox.ScrollToCaret();
ActualLine += LineJump;
}
public void Start()
{
Timer.Start();
}
}
}
这是一个老问题,但我有这个问题,我使用上面的richTextBox_TextChanged
事件,这是有效的。但我觉得这是一种解决方法,并希望记录实际的解决方案,以防其他人查找它。
如果您追加它会自动滚动,但是RichTextBox
必须重点。 请在AppendText
之前致电Focus
以确保其自动滚动。
richTextBox.Focus();
richTextBox.AppendText(text);
也不工作。 Downvoting只是为了让其他用户更容易看到。 – SubjectX 2017-07-13 16:24:53
对于一个WPF/XAML项目,请参阅[WPF的RichTextBox,自动滚动到结束(http://stackoverflow.com/q/10308475) – 2013-10-15 23:00:04