質問です。
vb2008ExpressEditionを使用しています。
formに貼り付けたwebbrowserコントロールにMouseleaveの
イベントを作りたいのですが、 いまいち方法がわかりません。
HtmlDocument、HtmlElementという単語は検索できたんですが、
どういう風使用すればいいかもわかりません。
方法はいくつかあると思いますが、サンプルソース等あれば紹介よろしくお願いします。
遅レスごめんなさい。
自己流ですが,サンプルを紹介するので参考にしてください。
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
YAS様サンプルコードありがとうございます。
なかなかレスがなかったので質問の仕方が悪かったんだろうなぁと…
二通りも方法があるんですね。
YAS様のHPはwebbrowserコントロール関連でよく拝見しています。
とても助かりました。本当にありがとうございました。