मुझे इसी तरह की आवश्यकता थी और मूल रूप से पोस्ट किया गया कोड एक जबरदस्त मदद थी। मैं मूल लेखक की दयालुता वापस करना चाहता हूं।
प्रदान किया गया उत्तर अपर्याप्त है। यह केवल अनुरोध के पहले भाग का जवाब देता है: प्रस्तुत एचटीएमएल को हाइलाइट करना। यह अनुरोध के दूसरे भाग को हल नहीं करता है जहां सी # प्रोग्राम बता सकता है कि कौन सा नोड चुना गया है।
माउस रूप में प्रवेश करती है और वांछित गाया क्षेत्र की ओर ले जाता है के रूप में, मुख्य आकर्षण माउस का पालन करेंगे। इसका मतलब है कि माउस द्वारा संभावित रूप से कई HTML तत्वों का दौरा किया जाएगा।
तो सी # कैसे बता सकता है कि उपयोगकर्ता कौन सा तत्व चाहता है?
कार्यक्रम को उपयोगकर्ता को वांछित प्रस्तुत क्षेत्र पर क्लिक करने की अनुमति देना है। क्लिक सी # कार्यक्रम द्वारा फंस जाना चाहिए। इसके अतिरिक्त, सी # को तत्व पर दिए गए क्लिक को अक्षम करना चाहिए (उदाहरण के लिए, यदि यह एक एंकर तत्व है जिसे आप लिंक का पालन करने के लिए क्लिक नहीं करना चाहते हैं)।
(1) 'दस्तावेज़ पूरा' घटना मैं दस्तावेज़ स्तर पर क्लिक करें घटना के लिए एक जाल (केवल दस्तावेज़ के लिए एक बार) जोड़ा पर::
मैं इस प्रकार के रूप में मेरे कार्यक्रम में इस हल
HtmlDocument htmlDoc = webBrowser.Document;
_document = webBrowser.Document;
//-- add our handler only once
if (!_documentHandlers.Contains(_document))
{
_document.MouseOver += new HtmlElementEventHandler(document_MouseOver);
_document.MouseLeave += new HtmlElementEventHandler(document_MouseLeave);
mshtml.HTMLDocumentEvents2_Event iEvent;
IHTMLDocument2 currentDoc = (IHTMLDocument2) webBrowser.Document.DomDocument;
iEvent = (mshtml.HTMLDocumentEvents2_Event) currentDoc;
iEvent.onclick += new mshtml.HTMLDocumentEvents2_onclickEventHandler(clickDocumentHandler);
_documentHandlers.Add(_document);
}
'दस्तावेज़ पूरा' घटना एक ही दस्तावेज़ (CNN.com कोशिश) के लिए कई बार शुरू किया जा सकता। '_documentHandlers' वैरिएबल यह सुनिश्चित करने के लिए हैशसेट है कि हम केवल एक दिए गए दस्तावेज़ के अनुसार हैंडलर को एक बार जोड़ते हैं।
(2) मैंने तत्व स्तर पर क्लिक को फंसाने का भी चयन किया। 'पर माउस' पर मैं कहा:
mshtml.HTMLElementEvents2_Event iEvent;
iEvent = element.DomElement as mshtml.HTMLElementEvents2_Event;
if (iEvent == null)
return;
iEvent.onclick += new mshtml.HTMLElementEvents2_onclickEventHandler(clickElementHandler);
और 'माउस छुट्टी' पर मैं क्लिक हैंडलर अपंजीकृत:
mshtml.HTMLElementEvents2_Event iEvent;
iEvent = element.DomElement as mshtml.HTMLElementEvents2_Event;
if (iEvent == null)
return;
iEvent.onclick -= new mshtml.HTMLElementEvents2_onclickEventHandler(clickElementHandler);
(3) क्लिक संचालकों सरल हैं:
private bool clickDocumentHandler(IHTMLEventObj pEvtObj)
{
IHTMLElement element = (mshtml.IHTMLElement)pEvtObj.srcElement;
pEvtObj.cancelBubble = true;
pEvtObj.returnValue = false;
return false;
}
private bool clickElementHandler(IHTMLEventObj pEvtObj)
{
IHTMLElement element = (mshtml.IHTMLElement)pEvtObj.srcElement;
pEvtObj.cancelBubble = true;
pEvtObj.returnValue = false;
return false;
}
ध्यान दें कि वे घटना के बुलबुले को रद्द कर देते हैं और क्लिक को ऊपर से गिरने से रोकने के लिए 'झूठी' का मूल्य वापस कर देते हैं।
इन संचालकों में आप तत्व क्लिक किया जा रहा बचाने के लिए और फिर अपने आवेदन में कहीं और इसका इस्तेमाल करने के अपने विशिष्ट कोड जोड़ सकते हैं।
ध्यान दें कि तत्व के स्तर पर, नहीं हर IHTMLElement एक onclick हैंडलर इसलिए अशक्त के लिए चेक का समर्थन करता है।
-Enjoy डेविड
क्या 'this' ऑपरेटर WebBrowser1_DocumentCompleted विधि में उल्लेख करने के लिए करता है? –