Microsoft KB Archive/311284

= How To Handle Document Events in a Visual Basic .NET Application =

Article ID: 311284

Article Last Modified on 5/13/2007

-

APPLIES TO


 * Microsoft Visual Basic .NET 2002 Standard Edition
 * Microsoft Visual Basic .NET 2003 Standard Edition

-



This article was previously published under Q311284



For a Microsoft Visual C# .NET version of this article, see 312777.

IN THIS TASK
SUMMARY
 * Requirements
 * Description of the Technique
 * Create the Project and Add the Code
 * Additional Notes

REFERENCES



SUMMARY
This article demonstrates how to catch document events for the WebBrowser control in Visual Basic .NET.

back to the top

Requirements
The following list outlines the recommended hardware, software, network infrastructure, and service packs that you need:
 * Microsoft Visual Studio .NET
 * Microsoft Internet Explorer 5.5 Service Pack 2 (SP2) or later

This article assumes that you are familiar with the following topics:
 * Visual Studio .NET
 * Internet Explorer
 * WebBrowser control

back to the top

Description of the Technique
The WebBrowser control is an easy control to work with in Visual Studio .NET or earlier versions of Microsoft Visual Studio. However, you may find it more difficult to handle the events of a WebBrowser control in Visual Studio .NET.

The following event interface exposes most of the document events that you handle in your application: Mshtml.HTMLDocumentEvents2_Event To handle the event, you must create your own Sub procedure or function that you can call when the event occurs. You must match the signature of the event that fires. For example, the following Sub procedure handles the MouseOver event of the document: Private Sub document_onmouseover(ByVal e As mshtml.IHTMLEventObj) After the event handler is in place, you must hook the event. You can hook an event any time after the DocumentComplete event on the WebBrowser control fires. Here is the syntax of the hook: AddHandler CType(document, _ mshtml.HTMLDocumentEvents2_Event).onmouseover, _ AddressOf Me.document_onmouseover This code calls the AddHandler statement and uses the CType function to pass the event. The CType function casts the document object to the appropriate type (mshtml.HTMLDocumentEvents2_Event), and then the OnMouseOver event is passed from that. The Me.document_onmouseoverSub procedure is passed to the second parameter, the AddressOf statement, which provides the address of your handler.

back to the top

Create the Project and Add Code
In the following sample, the WebBrowser control browses to http://www.microsoft.com. After the page loads, the sample hooks the OnMouseOver and the OnClick events. The sample then adds text to a list box whenever the events fire.  Start Visual Studio .NET. Create a new Windows Application project in Visual Basic .NET Add a reference to Microsoft.mshtml in the project. In the toolbox, click General. Right-click the open panel, and then click Customize Toolbox. Select the Microsoft Web Browser check box, and then click OK. In the toolbox, double-click Explorer.</li> In the toolbox, click Windows Forms, and then double-click the ListBox control.</li> Arrange the controls so that they are easy to view on the form.</li>  Add the following code to the top of AssemblyInfo.vb, replace the existing Import sentences Imports System Imports System.Drawing Imports System.Collections Imports System.ComponentModel Imports System.Windows.Forms Imports System.Data Imports System.Reflection Imports System.Runtime.InteropServices Imports System.Threading Imports System.Diagnostics </li>  Add the following code between Windows Form Designer generated code and End Class in the code view of Form1.vb Public Shared dwCookie2 As Integer Public Sub add_list(ByVal a As Object) ListBox1.Items.Insert(0, a)   End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load AxWebBrowser1.Navigate2(&quot;http://www.microsoft.com&quot;) Dim x As IEEvents = New IEEvents(AxWebBrowser1) x.fm = Me   End Sub

Private Sub AxWebBrowser1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AxWebBrowser1.Enter

End Sub

Private Sub AxWebBrowser1_DocumentComplete(ByVal sender As Object, ByVal e As AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent) Handles AxWebBrowser1.DocumentComplete Dim doc As mshtml.HTMLDocument doc = AxWebBrowser1.Document

AddHandler CType(doc, _           mshtml.HTMLDocumentEvents2_Event).onclick, AddressOf Document_onclick AddHandler CType(doc, _    mshtml.HTMLDocumentEvents2_Event).onmouseover, AddressOf Document_onmouseover End Sub

Private Sub AxWebBrowser1_BeforeNavigate2(ByVal sender As Object, ByVal e As AxSHDocVw.DWebBrowserEvents2_BeforeNavigate2Event) Handles AxWebBrowser1.BeforeNavigate2 Dim doc As mshtml.HTMLDocument doc = AxWebBrowser1.Document

RemoveHandler CType(doc, _           mshtml.HTMLDocumentEvents2_Event).onclick, _ AddressOf Document_onclick RemoveHandler CType(doc, _           mshtml.HTMLDocumentEvents2_Event).onmouseover, _ AddressOf Document_onmouseover End Sub Private Sub Document_onmouseover(ByVal e As mshtml.IHTMLEventObj) ListBox1.Items.Insert(0, &quot;onMouseOver: &quot; & _           e.srcElement.tagName.ToString) End Sub Private Function Document_onclick(ByVal e As mshtml.IHTMLEventObj) _ As Boolean ListBox1.Items.Insert(0, &quot;onClick: &quot; & _           e.srcElement.tagName.ToString) Return True End Function </li>  Add the following code after End Class Public Class IEHTMLDocumentEvents Implements mshtml.HTMLDocumentEvents2 Public Sub onactivate(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.onactivate

End Sub

Public Sub onafterupdate(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.onafterupdate

End Sub

Public Function onbeforeactivate(ByVal pEvtObj As mshtml.IHTMLEventObj) As Boolean Implements mshtml.HTMLDocumentEvents2.onbeforeactivate Return True End Function

Public Function onbeforedeactivate(ByVal pEvtObj As mshtml.IHTMLEventObj) As Boolean Implements mshtml.HTMLDocumentEvents2.onbeforedeactivate Return True End Function

Public Sub onbeforeeditfocus(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.onbeforeeditfocus

End Sub

Public Function onbeforeupdate(ByVal pEvtObj As mshtml.IHTMLEventObj) As Boolean Implements mshtml.HTMLDocumentEvents2.onbeforeupdate Return True End Function

Public Sub oncellchange(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.oncellchange

End Sub

Public Function onclick(ByVal pEvtObj As mshtml.IHTMLEventObj) As Boolean Implements mshtml.HTMLDocumentEvents2.onclick Return True End Function

Public Function oncontextmenu(ByVal pEvtObj As mshtml.IHTMLEventObj) As Boolean Implements mshtml.HTMLDocumentEvents2.oncontextmenu Return True End Function

Public Function oncontrolselect(ByVal pEvtObj As mshtml.IHTMLEventObj) As Boolean Implements mshtml.HTMLDocumentEvents2.oncontrolselect Return True End Function

Public Sub ondataavailable(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.ondataavailable

End Sub

Public Sub ondatasetchanged(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.ondatasetchanged

End Sub

Public Sub ondatasetcomplete(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.ondatasetcomplete

End Sub

Public Function ondblclick(ByVal pEvtObj As mshtml.IHTMLEventObj) As Boolean Implements mshtml.HTMLDocumentEvents2.ondblclick Return True End Function

Public Sub ondeactivate(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.ondeactivate

End Sub

Public Function ondragstart(ByVal pEvtObj As mshtml.IHTMLEventObj) As Boolean Implements mshtml.HTMLDocumentEvents2.ondragstart Return True End Function

Public Function onerrorupdate(ByVal pEvtObj As mshtml.IHTMLEventObj) As Boolean Implements mshtml.HTMLDocumentEvents2.onerrorupdate Return True End Function

Public Sub onfocusin(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.onfocusin

End Sub

Public Sub onfocusout(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.onfocusout

End Sub

Public Function onhelp(ByVal pEvtObj As mshtml.IHTMLEventObj) As Boolean Implements mshtml.HTMLDocumentEvents2.onhelp Return True End Function

Public Sub onkeydown(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.onkeydown

End Sub

Public Function onkeypress(ByVal pEvtObj As mshtml.IHTMLEventObj) As Boolean Implements mshtml.HTMLDocumentEvents2.onkeypress Return True End Function

Public Sub onkeyup(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.onkeyup

End Sub

Public Sub onmousedown(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.onmousedown

End Sub

Public Sub onmousemove(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.onmousemove

End Sub

Public Sub onmouseout(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.onmouseout

End Sub

Public Sub onmouseover(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.onmouseover

End Sub

Public Sub onmouseup(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.onmouseup

End Sub

Public Function onmousewheel(ByVal pEvtObj As mshtml.IHTMLEventObj) As Boolean Implements mshtml.HTMLDocumentEvents2.onmousewheel Return True End Function

Public Sub onpropertychange(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.onpropertychange

End Sub

Public Sub onreadystatechange(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.onreadystatechange

End Sub

Public Sub onrowenter(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.onrowenter

End Sub

Public Function onrowexit(ByVal pEvtObj As mshtml.IHTMLEventObj) As Boolean Implements mshtml.HTMLDocumentEvents2.onrowexit Return True End Function

Public Sub onrowsdelete(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.onrowsdelete

End Sub

Public Sub onrowsinserted(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.onrowsinserted

End Sub

Public Sub onselectionchange(ByVal pEvtObj As mshtml.IHTMLEventObj) Implements mshtml.HTMLDocumentEvents2.onselectionchange

End Sub

Public Function onselectstart(ByVal pEvtObj As mshtml.IHTMLEventObj) As Boolean Implements mshtml.HTMLDocumentEvents2.onselectstart Return True End Function

Public Function onstop(ByVal pEvtObj As mshtml.IHTMLEventObj) As Boolean Implements mshtml.HTMLDocumentEvents2.onstop Return True End Function End Class

Public Class IEEvents Implements SHDocVw.DWebBrowserEvents2 Public fm As Form1 Private icp As System.Runtime.InteropServices.UCOMIConnectionPoint Private cookie As Integer = -1 Private m_ie As AxSHDocVw.AxWebBrowser

Public Sub New(ByRef ie As AxSHDocVw.AxWebBrowser) ' Call QueryInterface for IConnectionPointContainer m_ie = ie       Dim icpc As System.Runtime.InteropServices.UCOMIConnectionPointContainer = CType(ie.GetOcx, System.Runtime.InteropServices.UCOMIConnectionPointContainer) ' Find the connection point for the ' DWebBrowserEvents2 source interface Dim g As Guid = GetType(SHDocVw.DWebBrowserEvents2).GUID icpc.FindConnectionPoint(g, icp)

'Pass a pointer to the host to the connection point icp.Advise(Me, cookie)

' Show the browser ie.Visible = True Dim oURL As Object = &quot;http://www.microsoft.com&quot; Dim oEmpty As Object = &quot;&quot; ie.Navigate2(oURL, oEmpty, oEmpty, oEmpty, oEmpty)

End Sub

Public Sub BeforeNavigate2(ByVal pDisp As Object, ByRef URL As Object, ByRef Flags As Object, ByRef TargetFrameName As Object, ByRef PostData As Object, ByRef Headers As Object, ByRef Cancel As Boolean) Implements SHDocVw.DWebBrowserEvents2.BeforeNavigate2

End Sub

Public Sub ClientToHostWindow(ByRef CX As Integer, ByRef CY As Integer) Implements SHDocVw.DWebBrowserEvents2.ClientToHostWindow

End Sub

Public Sub CommandStateChange(ByVal Command As Integer, ByVal Enable As Boolean) Implements SHDocVw.DWebBrowserEvents2.CommandStateChange

End Sub

Public Sub DocumentComplete(ByVal pDisp As Object, ByRef URL As Object) Implements SHDocVw.DWebBrowserEvents2.DocumentComplete Dim doc As mshtml.HTMLDocument = CType(CType(pDisp, SHDocVw.IWebBrowser2).Document, mshtml.HTMLDocument) Dim pConPtCon As System.Runtime.InteropServices.UCOMIConnectionPointContainer = CType(doc, System.Runtime.InteropServices.UCOMIConnectionPointContainer) Dim guid As Guid = System.Type.GetType(&quot;mshtml.HTMLDocumentEvents2&quot;).GUID Dim pConPt As System.Runtime.InteropServices.UCOMIConnectionPoint pConPtCon.FindConnectionPoint(guid, pConPt) Dim d As IEHTMLDocumentEvents = New IEHTMLDocumentEvents pConPt.Advise(d, Form1.dwCookie2)

Dim iEvent As mshtml.HTMLDocumentEvents2_Event iEvent = CType(doc, mshtml.HTMLDocumentEvents2_Event) AddHandler iEvent.onclick, AddressOf ClickEventHandler AddHandler iEvent.onmouseover, AddressOf MouseOverEventHandler End Sub Private Function ClickEventHandler(ByVal e As mshtml.IHTMLEventObj) As Boolean fm.add_list(e.type + &quot;:&quot; + e.srcElement.tagName) Return True End Function Private Sub MouseOverEventHandler(ByVal e As mshtml.IHTMLEventObj) fm.add_list(e.type + &quot;:&quot; + e.srcElement.tagName) End Sub Public Sub DownloadBegin Implements SHDocVw.DWebBrowserEvents2.DownloadBegin

End Sub

Public Sub DownloadComplete Implements SHDocVw.DWebBrowserEvents2.DownloadComplete

End Sub

Public Sub FileDownload(ByRef Cancel As Boolean) Implements SHDocVw.DWebBrowserEvents2.FileDownload

End Sub

Public Sub NavigateComplete2(ByVal pDisp As Object, ByRef URL As Object) Implements SHDocVw.DWebBrowserEvents2.NavigateComplete2

End Sub

Public Sub NavigateError(ByVal pDisp As Object, ByRef URL As Object, ByRef Frame As Object, ByRef StatusCode As Object, ByRef Cancel As Boolean) Implements SHDocVw.DWebBrowserEvents2.NavigateError

End Sub

Public Sub NewWindow2(ByRef ppDisp As Object, ByRef Cancel As Boolean) Implements SHDocVw.DWebBrowserEvents2.NewWindow2

End Sub

Public Sub OnFullScreen(ByVal FullScreen As Boolean) Implements SHDocVw.DWebBrowserEvents2.OnFullScreen

End Sub

Public Sub OnMenuBar(ByVal MenuBar As Boolean) Implements SHDocVw.DWebBrowserEvents2.OnMenuBar

End Sub

Public Sub OnQuit Implements SHDocVw.DWebBrowserEvents2.OnQuit

End Sub

Public Sub OnStatusBar(ByVal StatusBar As Boolean) Implements SHDocVw.DWebBrowserEvents2.OnStatusBar

End Sub

Public Sub OnTheaterMode(ByVal TheaterMode As Boolean) Implements SHDocVw.DWebBrowserEvents2.OnTheaterMode

End Sub

Public Sub OnToolBar(ByVal ToolBar As Boolean) Implements SHDocVw.DWebBrowserEvents2.OnToolBar

End Sub

Public Sub OnVisible(ByVal Visible As Boolean) Implements SHDocVw.DWebBrowserEvents2.OnVisible

End Sub

Public Sub PrintTemplateInstantiation(ByVal pDisp As Object) Implements SHDocVw.DWebBrowserEvents2.PrintTemplateInstantiation

End Sub

Public Sub PrintTemplateTeardown(ByVal pDisp As Object) Implements SHDocVw.DWebBrowserEvents2.PrintTemplateTeardown

End Sub

Public Sub PrivacyImpactedStateChange(ByVal bImpacted As Boolean) Implements SHDocVw.DWebBrowserEvents2.PrivacyImpactedStateChange

End Sub

Public Sub ProgressChange(ByVal Progress As Integer, ByVal ProgressMax As Integer) Implements SHDocVw.DWebBrowserEvents2.ProgressChange

End Sub

Public Sub PropertyChange(ByVal szProperty As String) Implements SHDocVw.DWebBrowserEvents2.PropertyChange

End Sub

Public Sub SetSecureLockIcon(ByVal SecureLockIcon As Integer) Implements SHDocVw.DWebBrowserEvents2.SetSecureLockIcon

End Sub

Public Sub StatusTextChange(ByVal Text As String) Implements SHDocVw.DWebBrowserEvents2.StatusTextChange

End Sub

Public Sub TitleChange(ByVal Text As String) Implements SHDocVw.DWebBrowserEvents2.TitleChange

End Sub

Public Sub UpdatePageStatus(ByVal pDisp As Object, ByRef nPage As Object, ByRef fDone As Object) Implements SHDocVw.DWebBrowserEvents2.UpdatePageStatus

End Sub

Public Sub WindowClosing(ByVal IsChildWindow As Boolean, ByRef Cancel As Boolean) Implements SHDocVw.DWebBrowserEvents2.WindowClosing

End Sub

Public Sub WindowSetHeight(ByVal Height As Integer) Implements SHDocVw.DWebBrowserEvents2.WindowSetHeight

End Sub

Public Sub WindowSetLeft(ByVal Left As Integer) Implements SHDocVw.DWebBrowserEvents2.WindowSetLeft

End Sub

Public Sub WindowSetResizable(ByVal Resizable As Boolean) Implements SHDocVw.DWebBrowserEvents2.WindowSetResizable

End Sub

Public Sub WindowSetTop(ByVal Top As Integer) Implements SHDocVw.DWebBrowserEvents2.WindowSetTop

End Sub

Public Sub WindowSetWidth(ByVal Width As Integer) Implements SHDocVw.DWebBrowserEvents2.WindowSetWidth

End Sub End Class </li></ol>

back to the top

Additional Notes

 * This process is the same if you automate Internet Explorer. Replace AxWebBrowser1 with your local variable name for Internet Explorer.
 * This sample does not consider framesets. When you navigate to a frameset, you may not see any events in your application. If necessary in your application, you must add code to handle the frameset possibility.

back to the top

<div class="references_section">