Cet article explique comment intercepter des événements de document pour le contrôle WebBrowser dans Visual Basic .NET.
Configuration requise
La liste suivante met en évidence le matériel recommandé, logiciel infrastructure réseau et service packs dont vous avez besoin :
- Microsoft Visual Studio .NET
- Microsoft Internet Explorer 5.5 Service Pack 2 (SP2) ou version ultérieure
Cet article suppose que vous êtes familiarisé avec les sujets suivants :
- Visual Studio .NET
- Internet Explorer
- Contrôle WebBrowser
Description de la technique
Le contrôle WebBrowser est un contrôle simple pour travailler dans Visual Studio .NET ou les versions antérieures de Microsoft Visual Studio. Toutefois, il peut s'avérer plus difficile à gérer les événements d'un contrôle WebBrowser dans Visual Studio .NET.
L'interface d'événement suivante expose la plupart des événements document qui vous gérer dans votre application :
Mshtml.HTMLDocumentEvents2_Event
pour gérer l'événement, vous devez créer votre propre procédure
Sub ou de la fonction que vous pouvez appeler lorsque l'événement se produit. Vous devez respecter la signature de l'événement déclenché. Par exemple, la procédure
Sub suivante gère l'événement
MouseOver du document :
Private Sub document_onmouseover(ByVal e As mshtml.IHTMLEventObj)
après le gestionnaire d'événements est en place, vous devez associer l'événement. Vous pouvez associer un événement tout moment après l'événement
DocumentComplete sur le déclenche contrôle WebBrowser. Ici, est la syntaxe du hook :
AddHandler CType(document, _
mshtml.HTMLDocumentEvents2_Event).onmouseover, _
AddressOf Me.document_onmouseover
ce code appelle l'instruction
AddHandler et utilise la fonction
CType pour transmettre l'événement. La fonction
CType convertit l'objet document pour le type approprié (
mshtml.HTMLDocumentEvents2_Event ), et ensuite l'événement
OnMouseOver est transmise que. La procédure
Sub Me.document_onmouseover est transmise à la deuxième paramètre, l'instruction
AddressOf , qui fournit l'adresse de votre gestionnaire de.
Créer le projet et ajouter du code
Dans l'exemple suivant, le contrôle WebBrowser navigue sur
http://www.microsoft.com
(http://www.microsoft.com)
. Après que la page de chargée, l'exemple intercepte l'
événement OnMouseOver et les événements
SurClic (OnClick) . L'exemple ajoute ensuite texte à une zone de liste lorsque les événements se déclenchent.
- Démarrez Visual Studio .NET.
- Créez un nouveau projet d'application Windows dans Visual Basic .NET
- Ajouter une référence à Microsoft.mshtml dans le projet.
- Dans la boîte à outils, cliquez sur général .
- Cliquez avec le bouton droit le volet Ouvrir, puis cliquez sur Personnaliser la boîte à outils .
- Activez la case à cocher navigateur Web Microsoft , puis cliquez sur OK .
- Dans la boîte à outils, double-cliquez sur Explorer .
- Dans la boîte à outils, cliquez sur Windows Forms , puis double-cliquez sur le contrôle zone de liste .
- Organiser les contrôles afin qu'ils soient facile de l'afficher dans l'écran.
- Ajoutez le code suivant à la partie supérieure de AssemblyInfo.vb, remplacer les phrases Importation existants
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
- 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("http://www.microsoft.com")
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, "onMouseOver: " & _
e.srcElement.tagName.ToString())
End Sub
Private Function Document_onclick(ByVal e As mshtml.IHTMLEventObj) _
As Boolean
ListBox1.Items.Insert(0, "onClick: " & _
e.srcElement.tagName.ToString())
Return True
End Function
- 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 = "http://www.microsoft.com"
Dim oEmpty As Object = ""
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("mshtml.HTMLDocumentEvents2").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 + ":" + e.srcElement.tagName)
Return True
End Function
Private Sub MouseOverEventHandler(ByVal e As mshtml.IHTMLEventObj)
fm.add_list(e.type + ":" + 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
Remarques supplémentaires
- Ce processus est identique si vous automatisez Internet Explorer. Remplacez AxWebBrowser1 votre nom de variable locale d'Internet Explorer.
- Cet exemple ne tient pas compte des jeux de cadres. Lorsque vous accédez à un jeu de cadres, vous pouvez voyez pas tous les événements dans votre application. Si nécessaire dans votre application, vous devez ajouter du code pour gérer le risque de jeu de cadres.
Pour plus d'informations sur le contrôle WebBrowser, ainsi que les méthodes, les propriétés et des événements qui le contrôle WebBrowser expose, reportez-vous à la documentation MSDN suivante :
Pour plus d'informations sur le développement de solutions Web pour Microsoft Internet Explorer, reportez-vous au adresse aux sites Web de Microsoft aux adresses suivantes :
Numéro d'article: 311284 - Dernière mise à jour: dimanche 13 mai 2007 - Version: 3.1
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
- Microsoft Visual Basic .NET 2002 Initiation
- Microsoft Visual Basic .NET 2003 Initiation
| kbmt kbhowtomaster kbwebbrowser KB311284 KbMtfr |
Traduction automatiqueIMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante:
311284
(http://support.microsoft.com/kb/311284/en-us/
)
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.