2008-09-05 20 views
2

Ich arbeite an einer einfachen Chat-Anwendung mit einem System.Windows.Forms.WebBrowser-Steuerelement, um die Nachrichten zwischen dem Benutzer und dem Empfänger anzuzeigen. Wie bekomme ich das Steuerelement automatisch jedes Mal nach unten, wenn ich den DocumentText des Steuerelements aktualisiere?WebBrowserControl Nach unten scrollen

+0

ähnliche Frage: [? Wie scrollt man von System.Windows.Forms.WebBrowser zu beenden] (http: //stackoverflow.com/questions/990651/how-to-scroll-to-end-of-system-windows-forms-webbrowser) – infografnet

Antwort

5

Danke Jungs - ich Sie stimmten beide, aber weder funktionieren würde für meine Situation. Was ich am Ende war tun

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

Wenn Sie dies in VB tun, verwenden Sie nicht Integer.MaxValue, verwenden Sie Int16 .MaxValue stattdessen. – Andy

2

würde ich die Autoscrolloffset-Eigenschaft verwenden, und der die untere linke Ecke des WebBrowser-Steuerelement gesetzt, so etwas wie:

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

Dies ist wahrscheinlich übertrieben, aber man könnte auch Skript auf dem WebBrowser-Steuerelement aufrufe und dann Verwenden Sie die Bildlaufeigenschaften des body-Tags. 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 hat eine Methode namens InvokeScript, die Sie eine Zeichenfolge von JavaScript übergeben können, um ausgeführt zu werden.

Aber ... wenn die Autoscrolloffset-Eigenschaft funktioniert ... ja, ich würde nur dass anstatt in JavaScript zu bekommen :)

0

Sie Scroll-Position an der Spitze halten und neue Nachricht einfügen an der Spitze.

, die nicht brauchen nach unten scrollen, sein Aussehen wie twitter :)

user2: 
    new message ← a new message is insert on top 

user1: 
    old message 
0
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); 
      } 
     }