|
ファッシオさん,こんにちは。
本当ですね。うまく動きません。一度AllowWebBrowserDropをFalseにすると再びTrueにしても動作しないようです。
Refreshをオーバーライドするのではなく,別メソッドとすることで動くようです。
理由はわかりません。参考にしてください。
(もしかしたらF5を押すことと,Refreshメソッドを実行することは等価ではないのかもしれません。)
Public Class Form1
Dim WithEvents WebBrowser1 As New ExWebBrowser
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.WebBrowser1.Dock = DockStyle.Fill
Me.WebBrowser1.AllowWebBrowserDrop = False
Application.DoEvents()
Me.Controls.Add(Me.WebBrowser1)
Me.WebBrowser1.GoHome()
End Sub
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
If e.Url = DirectCast(sender, WebBrowser).Url Then
MessageBox.Show("読み込み完了" & e.Url.ToString)
End If
End Sub
End Class
Public Class ExWebBrowser
Inherits WebBrowser
Public Overrides Function PreProcessMessage(ByRef msg As System.Windows.Forms.Message) As Boolean
Const WM_KEYDOWN As Integer = &H100
If msg.Msg = WM_KEYDOWN Then
Dim keyCode As Keys = CType(msg.WParam, Keys) And Keys.KeyCode
Select Case keyCode
Case Keys.F5
MessageBox.Show("F5が押されました", "ブラウザ更新", MessageBoxButtons.OK, MessageBoxIcon.Information)
Me.Refresh2()
Return True
End Select
End If
Return MyBase.PreProcessMessage(msg)
End Function
Public Sub Refresh2()
MyBase.Refresh()
Application.DoEvents()
While Me.ReadyState <> WebBrowserReadyState.Complete
Application.DoEvents()
End While
Me.OnDocumentCompleted(New WebBrowserDocumentCompletedEventArgs(Me.Url))
End Sub
End Class
|