2012-02-23 144 views
48

我的程序調用Java,然後將stdout重定向到RichTextBox。我的問題是每次寫入數據時,垂直滾動條總是停留在方框的頂部。將新數據寫入到底部時,富文本框滾動到底部

即使您滾動到底部,一旦寫入新數據,它就會到達頂部。我想相反。

因此,當寫入新數據時,它停留在底部。我怎樣才能做到這一點?

+0

對於一個WPF/XAML項目,請參閱[WPF的RichTextBox,自動滾動到結束(http://stackoverflow.com/q/10308475) – 2013-10-15 23:00:04

回答

91

是的,你可以使用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(); 
} 
+0

我想通了。由於某些原因,在VS 2010中,我不得不點擊富文本框,然後點擊事件,然後找到TExted並將其鏈接到「myrichTextBox_TextChanged」。有用的原因。 – user1158745 2012-02-23 19:41:23

+0

由於某些原因,Visual Studio 2017不提供此屬性作爲選項。這是否被棄用? – SubjectX 2017-07-13 16:26:51

+0

@SubjectX該文檔聲明它在當前版本的.Net框架中仍然可用。 – 2017-07-14 19:38:53

-2

當寫入新的數據,如果使用AppendText()它不會滾動起來,將永遠留在底部。

+3

錯!它停留在selectedPosition上。 – jAC 2013-06-04 08:31:05

+4

AppendText自動滾動很好提供myRichTextBox.HideSelection = false; – Philippe 2014-10-02 20:01:15

11

如果RichTextBox具有焦點並且使用AppendText添加信息,則RichTextBox將保持滾動到最後。如果您將HideSelection設置爲False,它會在失去焦點並保持自動滾動時保持其選擇狀態。

我設計了一個使用下面方法的Log Viewer GUI。它用完了一個完整的核心。擺脫這個代碼,並設置HideSelection爲False得到了CPU使用率下降到1-2%

//Don't use this! 
richTextBox.AppendText(text); 
richTextBox.ScrollToEnd(); 
+0

這是爲WPF RichTextBox。 'ScrollToEnd()'不是WinForms版本可用的方法。 – 2014-08-20 19:54:06

+0

它繼承自ScrollToEnd()' – DrWu 2014-09-03 22:58:46

+0

的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

-2

倒未玷污革新面值爲例=>

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(); 
      } 
     } 
    } 
-1

這是一個老問題,但我有這個問題,我使用上面的richTextBox_TextChanged事件,這是有效的。但我覺得這是一種解決方法,並希望記錄實際的解決方案,以防其他人查找它。

如果您追加它會自動滾動,但是RichTextBox必須重點。 請在AppendText之前致電Focus以確保其自動滾動。

richTextBox.Focus(); 

richTextBox.AppendText(text); 
+0

也不工作。 Downvoting只是爲了讓其他用戶更容易看到。 – SubjectX 2017-07-13 16:24:53