2012-02-09 19 views
6

私はウェブページを読み込むフォームを持っています(そのページは正常に動作しています)Webブラウザコントロールで要素の位置を見つける方法は?

私の問題は、特定のURLリンクが折りたたみ(私は、このリンクを見るためにスクロールダウンしなければならないかどうかを意味します) このvがスクロールアウトで表示されるかどうかを確認するにはスクロールする必要がありますか?私は広範な検索を行っているが、情報がないと思われるhtml要素の位置を見つける(現在のビューの上または下)

誰かこれについて何かを知っていて、正しい方向に私を向けることができますか? (私はC#のソリューションを探しています - WinForms)

更新:コードにはJohn Koerner氏に感謝します。彼が私の問題を解決するために費やした時間と労力を本当に感謝します。

そしてJonathan &他にも、私はジョナサン人の回答を回答としてマークすることもできますが、答えとして1つの返信のみを回答としてマークすることができます。彼のコメントも明確かつ有用なヒントでした。あなたはみんな素晴らしいですね!

私はあなたがwebbrowsercontrolでのJavaScript関数を呼び出すことができます持っていると仕事ができるのアイデア(それを試していないが、それは私があなたに提供できるよう最善です、申し訳ありません決して)

+0

メトロ? WinForms? WPF? Silverlight? MonoTouch? – SLaks

+0

WinForms(編集と追加) –

+0

表示されていない場合は、スクロールして表示したいだけですか?その場合は、ScrollIntoViewメソッドを使用して表示することができます。 –

答えて

7

[OK]を、私はグーグルとstackoverflowの上でこれをテストしてきたし、動作しているようです:

private bool isElementVisible(WebBrowser web, string elementID) 
{ 

    var element = web.Document.All[elementID]; 

    if (element == null) 
     throw new ArgumentException(elementID + " did not return an object from the webbrowser"); 

    // Calculate the offset of the element, all the way up through the parent nodes 
    var parent = element.OffsetParent; 
    int xoff = element.OffsetRectangle.X; 
    int yoff = element.OffsetRectangle.Y; 

    while (parent != null) 
    { 
     xoff += parent.OffsetRectangle.X; 
     yoff += parent.OffsetRectangle.Y; 
     parent = parent.OffsetParent; 
    } 

    // Get the scrollbar offsets 
    int scrollBarYPosition = web.Document.GetElementsByTagName("HTML")[0].ScrollTop; 
    int scrollBarXPosition = web.Document.GetElementsByTagName("HTML")[0].ScrollLeft; 

    // Calculate the visible page space 
    Rectangle visibleWindow = new Rectangle(scrollBarXPosition, scrollBarYPosition, web.Width, web.Height); 

    // Calculate the visible area of the element 
    Rectangle elementWindow = new Rectangle(xoff,yoff,element.ClientRectangle.Width, element.ClientRectangle.Height); 

    if (visibleWindow.IntersectsWith(elementWindow)) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

そして、それを使用するには、単に呼び出す:

isElementVisible(webBrowser1, "topbar") //StackOverflow's top navigation bar 
+0

うわー..素晴らしい。ありがとうジョンKoemer ..本当にあなたが私を助けに入れて努力と時間をいただきありがとうございます。運が良ければ..皆さん、皆あなたは単に素晴らしいです。どうもありがとう!!!! –

+0

あなたは私の日に感謝ジョンを作った –

3

:またLINK

することができますLINK

この2つの概念を混在させると、webbrowsercontrolのサイズを知るように、要素が表示されているかどうかを知ることができます。

webbrowsercontrolにjavascriptコードを挿入できることに注意してください。この投稿は、その方法を説明しています:LINK

幸運。

+0

ジョナサンありがとう。私は確かにそれを試してみます。誰かが簡単な方法や簡単な方法を持っている場合は、それを追加することを躊躇しないでください –

+0

Jonahtan、私はあなたの回答を回答としてマークすることもできますが、1つの回答だけを回答としてマークすることができます。あなたのコメントも、はっきりとしたヒントだった。代わりにurの答えを評価してください –

+0

ありがとう:Dそれは問題ではありません。私たちはポイントのためではなく、pplを手助けするためにここにいます。 – Jonathan

関連する問題