Pergunta

Estou trabalhando em um aplicativo de bate-papo simples usando um controle System.Windows.Forms.WebBrowser para exibir as mensagens entre o usuário e o destinatário.Como faço para que o controle role automaticamente para baixo sempre que atualizo o DocumentText do controle?

Foi útil?

Solução

Obrigado pessoal - votei em vocês dois, mas nenhum deles funcionaria para a minha situação.O que acabei fazendo foi

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

Outras dicas

Eu usaria a propriedade AutoScrollOffset e a definiria na parte inferior esquerda do controle WebBrowser, algo como:

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

Provavelmente isso é um exagero, mas você também pode invocar o script no controle WebBrowser e usar as propriedades de rolagem da tag body.Ou o método scrollTo da janela.

Para invocar o script, o controle WebBrowser possui uma propriedade Document que representa o objeto de documento do DOM.Possui um método chamado InvokeScript que você pode passar uma string de JavaScript para ser executada.

Mas...se a propriedade AutoScrollOffset funcionar...sim, eu usaria isso em vez de entrar em JavaScript :)

Você pode manter a posição de rolagem no topo e inserir uma nova mensagem no topo.

que não precisa rolar para baixo, parece o 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top