现在的位置: 首页 > 综合 > 正文

How to handle IHTMLDocument2.onmouseover event in .NET

2012年08月18日 ⁄ 综合 ⁄ 共 582字 ⁄ 字号 评论关闭

有些ActiveX控件的事件机制是使用IDispatch接口的default method实现的,在.NET中如何使用这样的事件回调呢?
1)?定义一个类,定义事件处理的方法并加上属性标识它是该类的IDispatch接口缺省方法,下面是一个例子:
Public Class Interop
    Public Sub onMouseOver()
        MessageBox.Show("MouseOver")
    End Sub
End Class

2) 但是如果你直接写
IHTMLDocument2 doc = axWebBrowser1.Document
doc.onmouseover = New Interop
那在运行时会得到一个NOT_IMPLEMENTED的异常,因为默认情况下.NET 的Interop Marshaller会将marshal成VT_UNKNOWN类型的Variant,而我们这里需要marshal成VT_DISPATCH的Variant。我们可以使用.NET提供的DisptachWrapper来解决这个问题。
doc.onmouseover = New DispatchWrapper(New Interop)
当你不再需要处理这个事件时,你可以使用下面的方法把该event handler断开。
doc.onmouseover = New DispatchWrapper(Nothing)

抱歉!评论已关闭.