Domanda

Sto lavorando su una semplice applicazione di chat utilizzando un controllo System.Windows.Forms.WebBrowser per visualizzare i messaggi tra l'utente e il destinatario.Come posso fare in modo che il controllo scorra automaticamente fino in fondo ogni volta che aggiorno il DocumentText del controllo?

È stato utile?

Soluzione

Grazie ragazzi, vi ho votato entrambi ma nessuno dei due avrebbe funzionato per la mia situazione.Quello che ho finito per fare è stato

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

Altri suggerimenti

Vorrei utilizzare la proprietà AutoScrollOffset e impostarla in basso a sinistra del controllo WebBrowser, quindi qualcosa del tipo:

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

Questo è probabilmente eccessivo, ma potresti anche richiamare uno script sul controllo WebBrowser e quindi utilizzare le proprietà di scorrimento del tag body.Oppure il metodo scrollTo della finestra.

Per richiamare lo script, il controllo WebBrowser dispone di una proprietà Document che rappresenta l'oggetto documento dal DOM.Ha un metodo chiamato InvokeScript che puoi passare una stringa di JavaScript da eseguire.

Ma...se la proprietà AutoScrollOffset funziona...sì, lo userei semplicemente invece di entrare in JavaScript :)

È possibile mantenere la posizione di scorrimento in alto e inserire un nuovo messaggio in alto.

non è necessario scorrere fino in fondo, sembra 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);
            }
        }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top