Visual Basic .NET 응용 프로그램에서 문서 이벤트를 처리하는 방법

이 문서는 이전에 다음 ID로 출판되었음: KR311284
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
이 문서의 Microsoft Visual C# .NET 버전에 대한 내용은 312777을 참조하십시오.

문서 내용

요약
이 문서에서는 Visual Basic .NET에서 WebBrowser 컨트롤에 대한 문서 이벤트를 catch하는 방법을 설명합니다.

맨 위로

요구 사항

다음은 권장되는 하드웨어, 소프트웨어 및 네트워크 인프라와 필요한 서비스 팩의 목록입니다.
  • Microsoft Visual Studio .NET
  • Microsoft Internet Explorer 5.5 서비스 팩 2(SP2) 이상
이 문서에서는 사용자가 다음 내용을 잘 알고 있는 것으로 가정합니다.
  • Visual Studio .NET
  • Internet Explorer
  • WebBrowser 컨트롤
맨 위로

기술 설명

WebBrowser 컨트롤은 Visual Studio .NET이나 이전 버전의 Microsoft Visual Studio에서 쉽게 사용할 수 있는 컨트롤입니다. 하지만 Visual Studio .NET에서는 WebBrowser 컨트롤의 이벤트를 처리하기가 매우 어렵습니다.

다음 이벤트 인터페이스는 응용 프로그램에서 사용자가 처리하는 대부분의 문서 이벤트를 제공합니다.
Mshtml.HTMLDocumentEvents2_Event				
이벤트를 처리하려면 해당 이벤트가 발생할 때 호출할 수 있는 사용자 고유의 하위 프로시저나 함수를 만들어야 합니다. 발생하는 이벤트의 서명을 일치시켜야 합니다. 예를 들어, 다음 하위 프로시저는 문서의 MouseOver 이벤트를 처리합니다.
Private Sub document_onmouseover(ByVal e As mshtml.IHTMLEventObj)				
이벤트 처리기를 적용한 후에는 이벤트를 연결해야 합니다. WebBrowser 컨트롤의 DocumentComplete 이벤트가 발생한 후에는 언제든지 이벤트를 연결할 수 있습니다. 다음은 연결(hook) 구문입니다.
AddHandler CType(document, _mshtml.HTMLDocumentEvents2_Event).onmouseover, _AddressOf Me.document_onmouseover				
이 코드는 AddHandler 문을 호출하고 CType 함수를 사용하여 이벤트를 전달합니다. CType 함수가 문서 개체를 적절한 형식(mshtml.HTMLDocumentEvents2_Event)으로 변환하면 그 다음에 OnMouseOver 이벤트가 이 문서 개체에서 전달됩니다. Me.document_onmouseover하위 프로시저가 처리기의 주소를 제공하는 두 번째 매개 변수인 AddressOf 문으로 전달됩니다.

맨 위로

프로젝트 만들기 및 코드 추가

다음 예제에서는 WebBrowser 컨트롤이 http://www.microsoft.com으로 이동하게 합니다. 페이지가 로드되면 예제는 OnMouseOver 이벤트와 OnClick 이벤트를 연결합니다. 그러면 이들 이벤트가 발생할 때마다 목록 상자에 텍스트가 추가됩니다.
  1. Visual Studio .NET을 시작합니다.
  2. Visual Basic .NET에서 새로운 Windows 응용 프로그램 프로젝트를 만듭니다.
  3. 프로젝트에 Microsoft.mshtml에 대한 참조를 추가합니다.
  4. 도구 상자에서 일반을 누릅니다.
  5. 열리는 패널을 마우스 오른쪽 단추로 누른 다음 도구 상자 사용자 지정을 누릅니다.
  6. Microsoft 웹 브라우저 확인란을 선택한 다음 확인을 누릅니다.
  7. 도구 상자에서 Explorer를 두 번 누릅니다.
  8. 도구 상자에서 Windows Forms를 두 번 누른 다음 ListBox 컨트롤을 두 번 누릅니다.
  9. 폼에서 잘 보이게 컨트롤을 배열합니다.
  10. AssemblyInfo.vb의 맨 위에 다음 코드를 추가하여 기존의 Import 문을 대체합니다.
    Imports SystemImports System.DrawingImports System.CollectionsImports System.ComponentModelImports System.Windows.FormsImports System.DataImports System.ReflectionImports System.Runtime.InteropServicesImports System.ThreadingImports System.Diagnostics
  11. Form1.vb의 코드 보기에서 Windows Form 디자이너에서 생성한 코드End Class 사이에 다음 코드를 추가합니다.
    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
  12. 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 FunctionEnd ClassPublic 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 SubEnd Class
맨 위로

추가 정보

  • Internet Explorer를 자동화한 경우에도 이 프로세스는 동일합니다. AxWebBrowser1을 해당 Internet Explorer의 로컬 변수 이름으로 바꿉니다.
  • 이 예제는 프레임셋을 고려하지 않은 것입니다. 프레임셋으로 이동하면 응용 프로그램의 이벤트가 나타나지 않을 수도 있습니다. 필요한 경우 응용 프로그램에 프레임셋 가능성을 처리하기 위한 코드를 추가해야 합니다.
맨 위로
참조
WebBrowser 컨트롤과 WebBrowser 컨트롤이 제공하는 메서드, 속성 및 이벤트에 대한 자세한 내용은 다음 MSDN 설명서를 참조하십시오. Microsoft Internet Explorer의 웹 기반 솔루션 개발에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오.맨 위로



Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.
web browser
속성

문서 ID: 311284 - 마지막 검토: 12/07/2015 08:05:17 - 수정: 2.4

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

  • kbnosurvey kbarchive kbhowtomaster kbwebbrowser KB311284
피드백