WebbrowserコントロールにMouseLeaveイベント

解決


永井  2008-08-08 12:01:38  No: 145049  IP: 192.*.*.*

質問です。 
vb2008ExpressEditionを使用しています。
formに貼り付けたwebbrowserコントロールにMouseleaveの
イベントを作りたいのですが、 いまいち方法がわかりません。 
HtmlDocument、HtmlElementという単語は検索できたんですが、
どういう風使用すればいいかもわかりません。

方法はいくつかあると思いますが、サンプルソース等あれば紹介よろしくお願いします。

編集 削除
YAS  2008-08-25 22:25:46  No: 145050  IP: 192.*.*.*

遅レスごめんなさい。
自己流ですが,サンプルを紹介するので参考にしてください。

WebBrowserを継承するなら次のようなコードで実現できます。
Public Class Form1

    Private WithEvents WebBrowser As New ExWebBrowser

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.WebBrowser.Dock = DockStyle.Fill
        Me.Controls.Add(WebBrowser)
        Me.WebBrowser.GoHome()
    End Sub

    Private Sub WebBrowser_MouseLeave(ByVal e As System.Windows.Forms.MouseEventArgs) Handles WebBrowser.MouseLeave
        MessageBox.Show("MouseLeave!")
    End Sub

End Class

Public Class ExWebBrowser
    Inherits WebBrowser

    Private WithEvents Body As HtmlElement

    Public Shadows Event MouseLeave(ByVal e As MouseEventArgs)

    Protected Overrides Sub OnDocumentCompleted(ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)
        Me.Body = Me.Document.Body
        MyBase.OnDocumentCompleted(e)
    End Sub

    Private Sub Body_MouseLeave(ByVal sender As Object, ByVal e As System.Windows.Forms.HtmlElementEventArgs) Handles Body.MouseLeave
        RaiseEvent MouseLeave(New MouseEventArgs(Windows.Forms.MouseButtons.None, 0, e.ClientMousePosition.X, e.ClientMousePosition.Y, 0))
    End Sub

End Class

継承しないなら次のようなコードで実現できます。
Public Class Form1

    Private WithEvents WebBrowser As New WebBrowser
    Private WithEvents ExBrowser As New ExBrowser(WebBrowser)

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.WebBrowser.Dock = DockStyle.Fill
        Me.Controls.Add(WebBrowser)
        Me.WebBrowser.GoHome()
    End Sub

    Private Sub WebBrowser_MouseLeave(ByVal e As System.Windows.Forms.MouseEventArgs) Handles ExBrowser.MouseLeave
        MessageBox.Show("MouseLeave!")
    End Sub

End Class

Public Class ExBrowser

    Public WithEvents _Browser As WebBrowser
    Private WithEvents _Body As HtmlElement

    Public Event MouseLeave(ByVal e As MouseEventArgs)

    Public Sub New(ByVal Browser As WebBrowser)
        Me._Browser = Browser
    End Sub

    Private Sub _Browser_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles _Browser.DocumentCompleted
        Me._Body = DirectCast(sender, WebBrowser).Document.Body
    End Sub

    Private Sub _Body_MouseLeave(ByVal sender As Object, ByVal e As System.Windows.Forms.HtmlElementEventArgs) Handles _Body.MouseLeave
        RaiseEvent MouseLeave(New MouseEventArgs(MouseButtons.None, 0, e.ClientMousePosition.X, e.ClientMousePosition.Y, 0))
    End Sub

End Class

編集 削除
永井  2008-08-27 19:35:37  No: 145051  IP: 192.*.*.*

YAS様サンプルコードありがとうございます。
なかなかレスがなかったので質問の仕方が悪かったんだろうなぁと…

二通りも方法があるんですね。
YAS様のHPはwebbrowserコントロール関連でよく拝見しています。
とても助かりました。本当にありがとうございました。

編集 削除