WebBrowserControl Nach unten scrollen
-
09-06-2019 - |
Frage
Ich arbeite an einer einfachen Chat-Anwendung, die ein System.Windows.Forms.WebBrowser-Steuerelement verwendet, um die Nachrichten zwischen dem Benutzer und dem Empfänger anzuzeigen.Wie kann ich das Steuerelement dazu bringen, jedes Mal, wenn ich den DocumentText des Steuerelements aktualisiere, automatisch nach unten zu scrollen?
Lösung
Danke Leute – ich habe euch beiden positiv bewertet, aber keiner von beiden würde für meine Situation funktionieren.Am Ende habe ich Folgendes getan:
webCtrl.Document.Window.ScrollTo(0, int.MaxValue);
Andere Tipps
Ich würde die AutoScrollOffset-Eigenschaft verwenden und sie unten links im WebBrowser-Steuerelement festlegen, also etwa so:
webCtrl.AutoScrollOffset = new Point(0, webCtrl.Height);
Das ist wahrscheinlich übertrieben, aber Sie könnten auch ein Skript im WebBrowser-Steuerelement aufrufen und dann die Scroll-Eigenschaften des Body-Tags verwenden.Oder die scrollTo-Methode des Fensters.
Um ein Skript aufzurufen, verfügt das WebBrowser-Steuerelement über eine Document-Eigenschaft, die das Dokumentobjekt aus dem DOM darstellt.Es verfügt über eine Methode namens InvokeScript, mit der Sie eine auszuführende JavaScript-Zeichenfolge übergeben können.
Aber...wenn die AutoScrollOffset-Eigenschaft funktioniert ...Ja, ich würde das einfach verwenden, anstatt mich mit JavaScript zu beschäftigen :)
Sie können die Bildlaufposition oben beibehalten und eine neue Nachricht oben einfügen.
Das muss nicht ganz nach unten gescrollt werden, es sieht aus wie 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);
}
}