2009-05-21 24 views
68

Necesito poder desplazar un RichTextBox hasta la parte inferior, incluso cuando no añada texto. Sé que puedo agregar texto y luego usarlo para establecer el inicio de la selección. Sin embargo, quiero asegurarme de que esté en la parte inferior por razones visuales, así que no estoy agregando ningún texto.¿Cómo desplazo un RichTextBox hacia abajo?

Respuesta

100

Puede intentar establecer la propiedad SelectionStart a la longitud del texto y luego llamar al método ScrollToCaret.

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

no muy fiables, me temo. A veces se desplaza solo para que el píxel superior del cursor esté visible. – gatopeich

+1

Uso Visual Studio 2013 y WPF, pero el método ScrollToCaret() no existe para RichTextBox, Any Idea? – Cyberguille

+0

@gatopeich - ponga una nueva línea al final de su texto y debería poder ver todo –

14

En WPF puede utilizar ScrollToEnd:

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

no funciona al agregar texto programáticamente –

+0

la pregunta es sobre winforms, scroll to end no existe allí – riki

-1

No hay necesidad de:

richTextBox.SelectionStart = richTextBox.Text.Length; 

Esto hace el truco:

richTextBox.ScrollToCaret(); 
+12

Pero no se trata de el fondo, ¿cómo se desplazaría esto hacia abajo? – LarsTech

16

El RichTextBox permanecerá desplazado hasta el final si tiene centrarse y utiliza AppendText para agregar la información. Si establece HideSelection en falso, mantendrá su selección cuando pierda el foco y permanezca desplazado automáticamente.

Diseñé una GUI del Visor de registros que utilizaba el método siguiente. Usó hasta un núcleo completo para mantenerse al día. Deshacerse de este código y establecer HideSelection en falso redujo el uso de la CPU al 1-2%.

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

¿Esto es confiable? –

0

debe ser escrito en caso TextChanged del cuadro de texto enriquecido como:

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