首页 > 编程 > HTML > 正文

WebBrowser控件捕捉DHTML事件

2024-08-26 00:15:35
字体:
来源:转载
供稿:网友

作者:tuenhai.com msn: king#tuenhai.com

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
http://www.tuenhai.com/

   开发工具:microsoft visual studio .net 2003
   操作系统:windows xp

  原文:http://www.devx.com/vb2themax/tip/18798

  和其他控件一样,我们可以用webbrowser控件来构筑windows form应用程序。从工具箱中选择windows 窗体控件组,单击“microsoft web 浏览器”,visual studio .net 在后台使用aximp.exe工具创建activex 控件,控件名字为“axwebbrowser”。在vb.net中,不能直接使用com组件,com都是unmanaged code,在vb.net中使用这些组件,必须完成从unmanaged code到managed code的转换。
   一般地,你可以像使用原来的webbrowser控件一样,如call 方法,指定属性,捕捉事件等。
   有些事情并不是那么简单的。我们要捕捉页面事件,如当用户点击页面元素(如背景)时,引发页面元素的onclick事件。发果没有捕捉到事件,就要提升dhtml的等级,直到document对象的最高层次。这样,我们就能捕捉到任何事件了。在vb6中,我们可以简单地用withevents关键词指定webbrowser.document到mshtml.htmldocument。
   在vb.net中,这个简单方法不再有效。因为activex控件创建了两个接口,两个接口中使用了同样的方法名,导致出现运行时错误。所以,你必须明确指定document对象使用的接口,并创建事件处理句柄(呵呵,tuenhai翻译得还不错吧)。

  以下是示例代码:

' 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

译者注:
   这是tuenhai的第一篇译稿。
   个人心得,近几日在国外有关程序设计网站转悠,得益良多。又想到书法学习的“取法乎上”。共享软件的出路在于走向国际。软件设计的学习又何尝不是这样呢?国际的学习资源相比国内的学习资源如何?
   english决不是障碍。tuenhai不相信自己的english会比您好。初中基础,加上金山词霸即指即译,足矣。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表