WebBrowserControl Rolar para baixo
-
09-06-2019 - |
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?
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);
}
}