我的程序調用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