2009-05-21 3 views
68

Мне нужно прокрутить RichTextBox до конца, даже если я не добавляю текст. Я знаю, что могу добавить текст, а затем использовать его для установки начала выбора. Однако я хочу, чтобы он был снизу по видимым причинам, поэтому я не добавляю текст.Как прокрутить RichTextBox до конца?

ответ

100

Вы можете попробовать установить свойство SelectionStart на длину текста, а затем вызвать метод ScrollToCaret.

richTextBox.SelectionStart = richTextBox.Text.Length; 
richTextBox.ScrollToCaret(); 
+2

Не очень надежный, я боюсь. Иногда вы прокручиваетесь так, чтобы отображался верхний пиксель каретки. – gatopeich

+1

Я использую Visual Studio 2013 и WPF, но метод ScrollToCaret() не существует для RichTextBox, Any Idea? – Cyberguille

+0

@gatopeich - поставьте новую строку в конце вашего текста, и вы сможете увидеть все. –

14

В WPF вы можете использовать ScrollToEnd:

richTextBox.AppendText(text); 
richTextBox.ScrollToEnd(); 
+0

не работает при добавлении текста программно –

+0

вопрос о winforms, прокрутка до конца не существует – riki

-1

Там нет необходимости:

richTextBox.SelectionStart = richTextBox.Text.Length; 

Это делает трюк:

richTextBox.ScrollToCaret(); 
+12

Но у карета нет внизу, как бы это прокрутить до дна? – LarsTech

16

RichTextBox будет оставаться прокручивается до конца, если фокус, и вы используете AppendText, чтобы добавить информацию. Если вы установите HideSelection на false, он будет сохранять свой выбор, когда он потеряет фокус и останется автопрокрученным.

Я разработал GUI Log Viewer GUI, который использовал метод ниже. Он использовал до полного ядро. Избавьтесь от этого кода и установив HideSelection в значение false, при использовании ЦП до 1-2%.

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

Является ли это надежным? –

0

Код должен быть написан в TextChanged случае богатого текстового поля, как:

private void richTextBox_TextChanged(object sender, EventArgs e) { 
     richTextBox.SelectionStart = richTextBox.Text.Length; 
     richTextBox.ScrollToCaret(); 
} 
Смежные вопросы