WebBrowser控件捕捉DHTML事件
發(fā)表時(shí)間:2024-02-24 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]WebBrowser控件捕捉DHTML事件 屠恩海(SunHai)翻譯 開(kāi)發(fā)工具:Microsoft Visual Studio .NET 2003 操作系統(tǒng):Windows XP 原文:http://www.devx.com/vb2themax/tip...
WebBrowser控件捕捉DHTML事件
屠恩海(SunHai)翻譯
開(kāi)發(fā)工具:Microsoft Visual Studio .NET 2003
操作系統(tǒng):Windows XP
原文:http://www.devx.com/vb2themax/tip/18798
和其他控件一樣,我們可以用WebBrowser控件來(lái)構(gòu)筑我們的Windows form應(yīng)用程序。從工具箱中選擇Windows 窗體控件組,單擊“Microsoft Web 瀏覽器”,Visual Studio .NET 在后臺(tái)使用AxImp.exe工具創(chuàng)建ActiveX 控件,控件名字為“AxWebBrowser”。在VB.NET中,不能直接使用COM組件,COM都是Unmanaged Code,在VB.NET中使用這些組件,必須完成從Unmanaged Code到Managed Code的轉(zhuǎn)換。
一般地,你可以像使用原來(lái)的WebBrowser控件一樣,如call 方法,指定屬性,捕捉事件等。
有些事情并不是那么簡(jiǎn)單的。我們要捕捉頁(yè)面事件,如當(dāng)用戶點(diǎn)擊頁(yè)面元素(如背景)時(shí),引發(fā)頁(yè)面元素的onclick事件。發(fā)果我們沒(méi)有捕捉到事件,就要提升DHTML的等級(jí),直到Document對(duì)象的最高層次。這樣,我們就能捕捉到任何事件了。在VB6中,我們可以簡(jiǎn)單地用WithEvents關(guān)鍵詞指定WebBrowser.Document到MSHTML.HTMLDocument。
在VB.NET中,這個(gè)簡(jiǎn)單方法不再有效。因?yàn)锳ctiveX控件創(chuàng)建了兩個(gè)接口,兩個(gè)接口中使用了同樣的方法名,導(dǎo)致出現(xiàn)運(yùn)行時(shí)錯(cuò)誤。所以,你必須明確指定Document對(duì)象使用的接口,并創(chuàng)建事件處理句柄。
以下是示例代碼:
' IMPORTANT: this code assumes that you've added a reference to the
' Microsoft HTML Object Library type library
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
AxWebBrowser1.Navigate("http://localhost/default.asp")
End Sub
Private Sub AxWebBrowser1_NavigateComplete2(ByVal sender As Object, _
ByVal e As AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event) Handles _
AxWebBrowser1.NavigateComplete2
' must wait for this event to grab a valid refernece to the Document
' property
Dim doc As mshtml.HTMLDocument = DirectCast(AxWebBrowser1.Document, _
mshtml.HTMLDocument)
' Cast to the interface that defines the event you're interested in
Dim docevents As mshtml.HTMLDocumentEvents2_Event = DirectCast(doc, _
mshtml.HTMLDocumentEvents2_Event)
' Define a handler to the onclick event
AddHandler docevents.onclick, AddressOf onclickproc
End Sub
' Notice that the signature of this event is different from usual, as it
' is expected to return a Boolean - if false the default effect associated
' with the event (for example, jumping to another page if the click is on
' an hyperlink) is canceled.
Private Function onclickproc(ByVal obj As mshtml.IHTMLEventObj) As Boolean
' an object on the page has been clicked - you can learn more about
' type and position of this object by querying the obj's properties
' ...
End Function
譯者注:
這是我的第一篇譯稿。
個(gè)人心得,近幾日在國(guó)外有關(guān)程序設(shè)計(jì)網(wǎng)站轉(zhuǎn)悠,得益良多。又想到書法學(xué)習(xí)的“取法乎上”。共享軟件的出路在于走向國(guó)際。軟件設(shè)計(jì)的學(xué)習(xí)又何嘗不是這樣呢?國(guó)際的學(xué)習(xí)資源相比國(guó)內(nèi)的學(xué)習(xí)資源如何?
English決不是障礙。我不相信我的English會(huì)比您好。初中基礎(chǔ),加上金山詞霸即指即譯,足矣。