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

Incluso si se desplaza a la parte inferior, una vez que los nuevos datos se ha escrito que se va a la parte superior. Me gustaría que el contrario.

Así que cuando se escriben nuevos datos, se queda en la parte inferior. ¿Cómo puedo hacer esto?

InformationsquelleAutor user1158745 | 2012-02-23

6 Comentarios

  1. 129

    Sí, usted puede utilizar el ScrollToCaret() método:

    //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();
    }
    • Me lo imaginé. por alguna razón en VS 2010, tuve que haga clic en el cuadro de texto enriquecido, a continuación, haga clic en eventos, a continuación, encontrar envió un mensaje a cambiado y enlace a «myrichTextBox_TextChanged». Forsome razón por la que trabajó.
    • Por alguna razón, Visual Studio 2017 no ofrecen esta propiedad como una opción. Es esta obsoleto?
    • La documentación indica que todavía está disponible en la versión actual de la .Net framework.
    • Aunque esta respuesta es la solución más sencilla, @Prem Kumar Badri la respuesta de abajo funciona mejor en general, ya que no se metan con el usuario la selección de texto y también no tienen la extraña alineación vertical problemas
  2. 13

    El control RichTextBox quedará desplazado hasta el final si que tiene el enfoque y el uso de AppendText para agregar la información. Si establece HideSelection a es Falso, se mantendrá su selección cuando se pierde el foco y la estancia auto del desplazamiento.

    He diseñado un Visor de Registro de interfaz gráfica de usuario que utiliza el método siguiente. Se utiliza un núcleo de mantener. Para deshacerse de este código y la configuración de HideSelection a False tengo el uso de la CPU hasta un 1-2%

    //Don't use this!
    richTextBox.AppendText(text);  
    richTextBox.ScrollToEnd();
    • Esto es para WPF RichTextBox. ScrollToEnd() no es un método disponible en el WinForms versión.
    • Se hereda de TextBoxBase que tiene ScrollToEnd()
    • Yo no lo veo en la documentación de System.Windows.Forms.TextBoxBase que es heredado por el RichTextBox para WinForms.
    • Ah me estaba mirando mal. Estás en lo correcto. Sin embargo, mi solución fue la de NO uso que de todos modos. Yo era capaz de utilizar AppendText y HideSelection en falso para obtener una solución más eficiente.
  3. 5
        [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);

    mediante el método anterior puede desplazarse rica cuadro de texto de abajo

    • Gracias. Ninguno de los otros métodos que funcionó para mí. Este trabajado. Por alguna razón, una vez que el cuadro de texto de empezar a conseguir demasiado de la de otros métodos no funcionan.
    • Muchas gracias por publicar esto! Parece que con RichTextBox, el uso de los otros métodos no hacen scroll bastante todo el camino hacia abajo si usted no tiene una nueva línea al final del texto.
  4. 3

    Voy a mantenerlo simple:

    • Conjunto HideSelection propiedad false

    • Uso AppendText() método para añadir texto a RichTextBox.

    Código:

    RichTextBox rtbTest;
    
    void InitRichTextBox()
    {
        //Init rtbTest...
    
        rtbTest.HideSelection = false;//Hide selection so that AppendText will auto scroll to the end
    }
    
    void AddText(string txt)
    {
        rtbTest.AppendText(txt);
    }
  5. -2

    Cuando la escritura de nuevos datos, si utiliza AppendText() no desplazarse hacia arriba y siempre estará en la parte inferior.

    • Mal! Se mantiene en el selectedPosition.
    • AppendText hace auto-scroll muy bien proporcionado myRichTextBox.HideSelection = false;
  6. -2

    Esta es una vieja pregunta, pero he tenido este problema y he usado el richTextBox_TextChanged caso como en el anterior, el cual trabaja. Pero yo siento que es una solución y quería documentar la solución real en caso de que alguien más lo busca.

    Si anexa auto-scroll, sin embargo, el RichTextBox tiene que estar concentrado.
    Así que llame a Focus antes de AppendText para asegurarse de que se auto-rollos.

    richTextBox.Focus();
    
    richTextBox.AppendText(text);
    • No funciona bien. Downvoting sólo para ser más visible para otros usuarios.

Dejar respuesta

Please enter your comment!
Please enter your name here