2009-06-10 18 views
5

私はSystem.Windows.Forms.WebBrowserコントロールを使用していますので、プログラムでスクロールする必要があります。スクロールするWebブラウザがプログラムで動作しない場合があります

例えば、私は、スクロールダウンして、このコードを使用します。

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

あなたは多分、ドキュメントが完全にロードされる前にスクロールしようとしていますか? –

+0

いいえ、ドキュメントは完全にロードされています – InfoStatus

答えて

4

この例は、表示されている動作を引き起こす可能性があるスクロールバーのプロパティの癖を回避して動作します。

これが機能するには、Microsoft HTML Object Library(mshtml)へのCOM参照を追加する必要があります。

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

+2

これは私のために働く。 reflectionを使ってmshtmlの参照を避けることができます:var dd = browser.Document.DomDocument; var doc = dd.GetType()。InvokeMember( "documentElement"、BindingFlags.GetProperty、null、dd、null); doc.GetType().InvokeMember( "scrollTop"、BindingFlags.SetProperty、null、doc、新しいオブジェクト[] {500}); –

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

これはすべての点だけ入力にスクロールする簡単な方法は、あなたの

+0

何も起こらない、ページがスクロールされない – dialex

関連する問題