Pregunta

Estoy trabajando en una aplicación de chat simple que utiliza un control System.Windows.Forms.WebBrowser para mostrar los mensajes entre el usuario y el destinatario.¿Cómo consigo que el control se desplace automáticamente hacia la parte inferior cada vez que actualizo el DocumentText del control?

¿Fue útil?

Solución

Gracias a todos. Voté a favor de ambos, pero ninguno funcionaría en mi situación.Lo que terminé haciendo fue

webCtrl.Document.Window.ScrollTo(0, int.MaxValue);

Otros consejos

Usaría la propiedad AutoScrollOffset y la configuraría en la parte inferior izquierda del control WebBrowser, algo como:

webCtrl.AutoScrollOffset = new Point(0, webCtrl.Height);

Probablemente esto sea excesivo, pero también podría invocar un script en el control WebBrowser y luego usar las propiedades de desplazamiento de la etiqueta del cuerpo.O el método scrollTo de la ventana.

Para invocar un script, el control WebBrowser tiene una propiedad Documento que representa el objeto documento del DOM.Tiene un método llamado InvokeScript al que puedes pasar una cadena de JavaScript para que se ejecute.

Pero...si la propiedad AutoScrollOffset funciona...sí, simplemente usaría eso en lugar de ingresar a JavaScript :)

Puede mantener la posición de desplazamiento en la parte superior e insertar un mensaje nuevo en la parte superior.

eso no necesita desplazarse hacia abajo, se parece a Twitter :)

user2:
  new message   ← a new message is insert on top

user1:
  old message
 public virtual void ScrollMessageIntoView()
        {

            System.Windows.Forms.Application.DoEvents();
            if (browser == null || browser.IsDisposed)
                return;

            if (browser.Document == null)
            {
                browser.Document.Window.ScrollTo(0,
                browser.Document.Body.ScrollRectangle.Height);
            }
        }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top