Вопрос

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

Это было полезно?

Решение

Спасибо, ребята, я проголосовал за вас обоих, но в моей ситуации ни один из них не подошел.В итоге я сделал следующее:

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

Другие советы

Я бы использовал свойство AutoScrollOffset и установил его в левом нижнем углу элемента управления WebBrowser, что-то вроде:

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

Вероятно, это излишне, но вы также можете вызвать сценарий в элементе управления WebBrowser, а затем использовать свойства прокрутки тега body.Или метод окна ScrollTo.

Для вызова сценария элемент управления WebBrowser имеет свойство Document, которое представляет объект документа из DOM.У него есть метод InvokeScript, которому вы можете передать строку JavaScript для выполнения.

Но...если свойство AutoScrollOffset работает...да, я бы просто использовал это вместо того, чтобы углубляться в JavaScript :)

Вы можете сохранить положение прокрутки сверху и вставить новое сообщение сверху.

это не нужно прокручивать вниз, это похоже на твиттер :)

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);
            }
        }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top