2009-05-21 17 views
68

Devo essere in grado di scorrere un RichTextBox verso il basso, anche quando non aggiungo il testo. So che posso aggiungere un testo e usarlo per impostare l'inizio della selezione. Comunque voglio assicurarmi che sia in fondo per motivi visivi, quindi non sto aggiungendo alcun testo.Come si scorre un RichTextBox in basso?

risposta

100

Si potrebbe provare a impostare la proprietà SelectionStart sulla lunghezza del testo e quindi chiamare il metodo ScrollToCaret.

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

Non molto affidabile, temo. A volte scorri solo in modo che il pixel superiore del cursore sia visibile. – gatopeich

+1

Uso Visual Studio 2013 e WPF, ma il metodo ScrollToCaret() non esiste per RichTextBox, Qualsiasi Idea? – Cyberguille

+0

@gatopeich - inserisci una nuova riga alla fine del testo e dovresti essere in grado di vedere tutto –

14

In WPF è possibile utilizzare ScrollToEnd:

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

non funziona quando aggiungi testo a livello di programmazione –

+0

la domanda è su winforms, scorri fino alla fine non esiste lì – riki

-1

Non v'è alcuna necessità di:

richTextBox.SelectionStart = richTextBox.Text.Length; 

Questo fa il trucco:

richTextBox.ScrollToCaret(); 
+12

Ma il punto di inserimento non è in basso, come sarebbe questo scorrere verso il basso? – LarsTech

16

Il RichTextBox rimarrà scorrere fino alla fine, se ha focus e usi AppendText per aggiungere le informazioni. Se si imposta HideSelection su falso, manterrà la selezione quando perde la messa a fuoco e rimane a scorrimento automatico.

Ho progettato una GUI di Log Viewer che utilizzava il metodo seguente. Ha utilizzato fino a un core completo. Liberarsi di questo codice e impostare HideSelection su falso ha ridotto l'utilizzo della CPU all'1-2%.

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

È affidabile? –

0

codice dovrebbe essere scritto in evento TextChanged del ricco casella di testo come:

private void richTextBox_TextChanged(object sender, EventArgs e) { 
     richTextBox.SelectionStart = richTextBox.Text.Length; 
     richTextBox.ScrollToCaret(); 
} 
Problemi correlati