Я работаю над простым приложением чата, использующим элемент управления System.Windows.Forms.WebBrowser для отображения сообщений между пользователем и получателем. Как заставить элемент управления автоматически прокручиваться вниз каждый раз, когда я обновляю DocumentText элемента управления?





Я бы использовал свойство AutoScrollOffset и установил его в нижнем левом углу элемента управления WebBrowser, например:
webCtrl.AutoScrollOffset = new Point(0, webCtrl.Height);
Вероятно, это перебор, но вы также можете вызвать скрипт в элементе управления WebBrowser, а затем использовать свойства прокрутки тега body. Или метод scrollTo окна.
Для вызова сценария элемент управления WebBrowser имеет свойство Document, представляющее объект документа из DOM. У него есть метод InvokeScript, с помощью которого вы можете передать строку JavaScript для выполнения.
Но ... если свойство AutoScrollOffset работает ... да, я бы просто использовал его вместо того, чтобы углубляться в JavaScript :)
Спасибо, ребята - я проголосовал за вас обоих, но в моей ситуации ни один из них не сработает. То, что я закончил, было
webCtrl.Document.Window.ScrollTo(0, int.MaxValue);
Если вы делаете это в VB, не используйте Integer.MaxValue, вместо этого используйте Int16.MaxValue.
Вы можете сохранить позицию прокрутки вверху и вставить новое сообщение вверху.
которые не нужно прокручивать вниз, это похоже на твиттер :)
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);
}
}
аналогичный вопрос: Как прокрутить до конца System.Windows.Forms.WebBrowser?