W tym artykule opisano sposób przechwytywania zdarzeń dokumentów w formancie WebBrowser w programie Visual Basic .NET.
Wymagania
Poniżej przedstawiono listę zalecanego sprzętu, oprogramowania, infrastruktury sieciowej i dodatków service pack:
-
Microsoft Visual Studio .NET
-
Microsoft Internet Explorer 5.5 z dodatkiem Service Pack 2 (SP2) lub nowszy
W tym artykule zakłada się, że użytkownik jest zaznajomiony z następującymi tematami:
-
Visual Studio .NET
-
Internet Explorer
-
Formant WebBrowser
Opis techniki
W programie Visual Studio .NET i wcześniejszych wersjach programu Microsoft Visual Studio formant WebBrowser obsługuje się stosunkowo łatwo. Obsługiwanie zdarzeń formantu WebBrowser w programie Visual Studio .NET może być jednak trudniejsze.
Poniższy interfejs zdarzenia udostępnia większość zdarzeń dokumentu obsługiwanych w aplikacjach:
Mshtml.HTMLDocumentEvents2_Event
Aby obsłużyć zdarzenie, należy utworzyć własną procedurę
Sub lub funkcję wywoływaną po wystąpieniu zdarzenia. Sygnatura wywoływanego zdarzenia musi być zgodna. Na przykład poniższa procedura
Sub obsługuje zdarzenie
MouseOver dokumentu:
Private Sub document_onmouseover(ByVal e As mshtml.IHTMLEventObj)
Po umieszczeniu programu obsługi zdarzeń należy zahaczyć zdarzenie. Zdarzenie można zahaczyć w dowolnym czasie po wystąpieniu zdarzenia
DocumentComplete formantu WebBrowser. Poniżej znajduje się składnia zahaczania:
AddHandler CType(document, _
mshtml.HTMLDocumentEvents2_Event).onmouseover, _
AddressOf Me.document_onmouseover
W tym kodzie wywoływana jest instrukcja
AddHandler i używana funkcja
CType do przekazania zdarzenia. Funkcja
CType przypisuje obiektowi dokumentu odpowiedni typ (
mshtml.HTMLDocumentEvents2_Event) i przekazuje zdarzenie
OnMouseOver. Procedura
SubMe.document_onmouseover jest przekazywana do drugiego parametru, instrukcji
AddressOf, podającej adres programu obsługi.
Tworzenie projektu i dodawanie kodu
W poniższym przykładzie formant WebBrowser przechodzi do adresu
http://www.microsoft.com
(http://www.microsoft.com)
. Po załadowaniu strony w przykładzie zahaczane są zdarzenia
OnMouseOver oraz
OnClick. Następnie po wystąpieniu zdarzenia dodawany jest tekst do pola listy.
-
Uruchom program Visual Studio .NET.
-
Utwórz nowy projekt Windows Application w programie Visual Basic .NET.
-
Dodaj odwołanie do obiektu Microsoft.mshtml w projekcie.
-
W przyborniku kliknij przycisk General.
-
Prawym przyciskiem myszy kliknij otwarty panel, a następnie kliknij polecenie Customize Toolbox.
-
Zaznacz pole wyboru Microsoft Web Browser i kliknij przycisk OK.
-
W przyborniku kliknij dwukrotnie przycisk Explorer.
-
W przyborniku kliknij przycisk Windows Forms, a następnie kliknij dwukrotnie formant ListBox.
-
Rozmieść formanty, aby były łatwo widoczne na formularzu.
-
Do projektu dodaj następujący kod:
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
AxWebBrowser1.Navigate2("http://www.microsoft.com")
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
Uwagi dodatkowe
-
W przypadku automatyzacji programu Internet Explorer procedura będzie wyglądała tak samo. Zastąp zmienną AxWebBrowser1 nazwą zmiennej lokalnej dla programu Internet Explorer.
-
W tym przykładzie nie uwzględnia się zestawów ramek. Po przejściu do zestawu ramek zdarzenia w aplikacji mogą być niewidoczne. Jeśli okaże się to konieczne, należy dodać kod w celu obsługi zestawu ramek.
Aby uzyskać więcej informacji dotyczących formantu WebBrowser oraz innych metod, właściwości i zdarzeń udostępnianych przez formant WebBrowser, zajrzyj do następującej dokumentacji usługi MSDN:
Aby uzyskać więcej informacji dotyczących tworzenia rozwiązań opartych na sieci Web dla programu Internet Explorer, odwiedź następujące witryny w sieci Web: