WebBrowserControl Scorri fino in fondo
-
09-06-2019 - |
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?
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);
}
}