2009-06-10 41 views
5

我正在使用System.Windows.Forms.WebBrowser控件,我需要執行程序滾動。以編程方式滾動WebBrowser有時不起作用

例如,我用這個代碼向下滾動:

WebBrowser.Document.Body.ScrollTop += WebBrowser.Height 

的問題是,在一些網站它的工作原理,但在別人不

http://news.google.com (works good) 
http://stackoverflow.com/ (doesn't work) 

這可能是一些有關身體代碼,但我無法弄清楚。
我也試過:

WebBrowser.Document.Window.ScrollTo(0, 50) 

但這種方式我不知道目前的位置。

+0

你也許試圖滾動文檔已完全加載之前? – 2009-06-16 11:00:41

+0

不,文檔已完全加載 – InfoStatus 2009-06-17 13:50:35

回答

4

本示例針對可能導致您看到的行爲的滾動條屬性中的怪癖。

在此之前,您需要添加一個COM參考到Microsoft HTML對象庫(mshtml)。

假設您有一個名爲webBrowser1的WebBrowser,您可以嘗試以下操作。我使用了幾個不同的接口,因爲我發現爲滾動屬性返回的值是不一致的。

  using mshtml; 

// ... snip ... 

      webBrowser1.Navigate("http://www.stackoverflow.com"); 
      while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) 
      { 
       Application.DoEvents(); 
       System.Threading.Thread.Sleep(20); 
      } 
      Rectangle bounds = webBrowser1.Document.Body.ScrollRectangle; 
      IHTMLElement2 body = webBrowser1.Document.Body.DomElement as IHTMLElement2; 
      IHTMLElement2 doc = (webBrowser1.Document.DomDocument as IHTMLDocument3).documentElement as IHTMLElement2; 
      int scrollHeight = Math.Max(body.scrollHeight, bounds.Height); 
      int scrollWidth = Math.Max(body.scrollWidth, bounds.Width); 
      scrollHeight = Math.Max(body.scrollHeight, scrollHeight); 
      scrollWidth = Math.Max(body.scrollWidth, scrollWidth); 
      doc.scrollTop = 500; 
+0

請注意,如果將doc.scrollTop設置爲大於可滾動的值,則不會發生任何情況。 – jjxtra 2009-06-16 15:41:00

4
webBrowser1.Document.Window.ScrollTo(new Point(50, 50)); 

這是滾動到每個點只輸入一個簡單的方法你