2012-02-09 27 views
6

मैं वेब ब्राउज़र नियंत्रण के साथ एक रूप है, जो एक वेबपृष्ठ को लोड है (इसके ठीक काम कर रहा, पृष्ठ लोड ठीक)वेब ब्राउज़र नियंत्रण में किसी तत्व की स्थिति कैसे खोजें?

अब मेरी समस्या नहीं है, मैं एक विशेष यूआरएल लिंक गुना या ऊपर से नीचे है कि क्या पता लगाना चाहते हैं गुना (मेरा मतलब, उपयोगकर्ता इस लिंक को देखने के लिए नीचे स्क्रॉल करने के लिए है या नहीं, या नहीं) कि क्या यह वी बाहर स्क्रॉल या हम यह देखने के लिए स्क्रॉल करने की आवश्यकता के साथ दिख रहा है .. मुझे आशा है कि मैं स्पष्ट कर रहा हूँ

मैंने व्यापक खोज की है, लेकिन ऐसा लगता है कि एचटीएमएल तत्वों की स्थिति (ऊपर या नीचे वर्तमान दृश्य) के बारे में कोई जानकारी उपलब्ध नहीं है

क्या कोई है इस बारे में कुछ जानता है और मुझे सही दिशा में इंगित कर सकता है? कोड के लिए जॉन कोर्नर के लिए बिग धन्यवाद:

अद्यतन - (WinForms मैं सी # समाधान के लिए देख रहा हूँ)। वास्तव में मेरे मुद्दे को हल करने में किए गए समय और प्रयास की सराहना करते हैं।

और जोनाथन & सभी को भी .. मेरी इच्छा है कि मैं जोनाथन के उत्तर को उत्तर के रूप में भी चिह्नित कर सकूं, लेकिन यह केवल एक उत्तर को उत्तर के रूप में चिह्नित करने की अनुमति देता है। उनकी टिप्पणी भी स्पष्ट और उपयोगी संकेत था। धन्यवाद आप लोग महान हैं !!!

+0

मेट्रो? WinForms? WPF? सिल्वरलाइट? MonoTouch? – SLaks

+0

WinForms (संपादित और जोड़ा गया) –

+0

यदि यह दिखाई नहीं दे रहा है, तो क्या आप इसे केवल देखने के लिए स्क्रॉल करना चाहते हैं? यदि ऐसा है, तो आप इसे दिखाने के लिए ScrollIntoView विधि का उपयोग कर सकते हैं। –

उत्तर

7

ठीक है, मैं गूगल और 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

वाह .. कमाल। धन्यवाद जॉन कोमेर .. वास्तव में मेरी मदद करने में किए गए प्रयास और समय की सराहना करते हैं। शुभकामनाएं .. अच्छा दोस्तों, आप सभी बस शानदार हैं। बहुत बहुत धन्यवाद!!!! –

+0

आपने मेरा दिन धन्यवाद जॉन बनाया –

3

मेरे पास है और यह विचार है कि (यह कभी नहीं की कोशिश की है, लेकिन यह सबसे अच्छा है कि मैं, आप के लिए की पेशकश कर सकते खेद है)

आप webbrowsercontrol में javascripts कार्यों कॉल कर सकते हैं काम कर सकता था: LINK

आप भी कर सकते हैं जावास्क्रिप्ट फ़ंक्शंस बनाएं जो आपको तत्व की स्थिति देते हैं: LINK

यदि आप इन दो अवधारणाओं को मिलाते हैं, तो आप जान सकते हैं कि तत्व दिखाई दे रहा है या नहीं, जैसा कि आप webbrowsercontrol के आकार को जानते हैं।

ध्यान दें कि आप webbrowsercontrol पर जावास्क्रिप्ट कोड इंजेक्ट कर सकते हैं। यह एसओ पोस्ट बताता है कि इसे कैसे करें: LINK

शुभकामनाएं।

+0

धन्यवाद जोनाथन। मैं निश्चित रूप से कोशिश करूँगा। अगर किसी के पास कोई त्वरित फिक्स या सरल तरीका है, तो कृपया इसे –

+0

जोनाहटन जोड़ने में संकोच न करें, मैं चाहता हूं कि मैं आपके उत्तर को उत्तर के रूप में भी चिह्नित कर सकूं, लेकिन यह केवल एक उत्तर को उत्तर के रूप में चिह्नित करने की अनुमति देता है। आपकी टिप्पणी क्रिस्टल स्पष्ट और उपयोगी संकेत भी थी। इसके बजाय –

+0

धन्यवाद उत्तर दें: डी इससे कोई फर्क नहीं पड़ता। हम यहाँ पीपीएल की मदद के लिए हैं, अंक के लिए नहीं। – Jonathan

संबंधित मुद्दे