texto sirve que para mensaje llegan insertar formato enriquecido correos convertir control contenido como cambiar c# winforms richtextbox

c# - sirve - texto enriquecido html



El cuadro de Texto enriquecido se desplaza hacia abajo cuando se escriben nuevos datos en él (5)

Al escribir datos nuevos, si usa AppendText() no se desplazará hacia arriba y siempre permanecerá en la parte inferior.

Mi programa llama a Java y luego redirige stdout a RichTextBox . Mi problema es que la barra de desplazamiento vertical siempre permanece en la parte superior del cuadro cada vez que se escriben datos.

Incluso si se desplaza hacia abajo, una vez que se han escrito nuevos datos, se dirige a la parte superior. Me gustaría lo opuesto.

Entonces, cuando se escriben nuevos datos, permanecen en la parte inferior. ¿Cómo puedo hacer esto?


Esta es una vieja pregunta, pero tuve este problema y utilicé el evento richTextBox_TextChanged como el anterior, que funciona. Pero creo que esto es una solución alternativa y quería documentar la solución real en caso de que alguien más la busque.

Si lo agrega, se desplazará automáticamente, sin embargo, se debe enfocar el RichTextBox . Así que llame a Focus antes de AppendText para asegurarse de que se desplaza automáticamente.

richTextBox.Focus(); richTextBox.AppendText(text);


RichTextBox se mantendrá desplazado hasta el final si tiene foco y utiliza AppendText para agregar la información. Si configura HideSelection en False, mantendrá su selección cuando pierda el foco y permanezca desplazado automáticamente.

Diseñé una GUI de Log Viewer que usaba el método a continuación. Usó hasta un núcleo completo para mantenerse al día. Deshacerse de este código y configurar HideSelection en False redujo el uso de la CPU al 1-2%

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


Sí, puedes usar el método 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(); }


[DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern IntPtr SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam); private const int WM_VSCROLL = 277; private const int SB_PAGEBOTTOM = 7; internal static void ScrollToBottom(RichTextBox richTextBox) { SendMessage(richTextBox.Handle, WM_VSCROLL, (IntPtr)SB_PAGEBOTTOM, IntPtr.Zero); richTextBox.SelectionStart = richTextBox.Text.Length; }

ScrollToBottom (richTextBox);

utilizando el método anterior, puede desplazar el cuadro de texto enriquecido a la parte inferior