C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: WebBrowserのリロード時にイベントを検知するには?


(過去ログ 90 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■53711 / inTopicNo.1)  WebBrowserのリロード時にイベントを検知するには?
  
□投稿者/ ファッシオ (1回)-(2010/09/24(Fri) 22:50:08)

分類:[VB.NET/VB2005 以降] 

WebBrowserのリロード時のイベントを検知したいのですが、リロード時にはDocumentCompletedイベントが発生しないので、
どのように解決するか色々と調べた結果、このサイトの以下のスレッドにたどり着きました。

http://bbs.wankuma.com/index.cgi?mode=al2&namber=50596&KLOG=85

そこで、このスレッドで紹介されている以下サイトを参考にやってみましたが、うまくいきません。
WebBrowserコントロールの更新の完了のイベントを発生させる
http://jumbofoot.cocolog-nifty.com/yass_vbnet_tips/2007/03/webbrowser_c87c.html

何がうまくいかないかというと、WebBrowser(上記参考サイトではWebBrowserを継承したExWebBrowser)の
AllowWebBrowserDropプロパティをFalseに設定すると、上記参考サイトに掲載されているソースの以下のメソッドが
実行されるようですが、以下のコメントの箇所で無限ループとなってしまいます。

    Public Overrides Sub Refresh()
        MyBase.Refresh()
        While Me.ReadyState = WebBrowserReadyState.Complete
            Application.DoEvents()
        End While
        While Me.ReadyState <> WebBrowserReadyState.Complete    '←ここが無限ループになる
            Application.DoEvents()
        End While
        Me.OnDocumentCompleted(New WebBrowserDocumentCompletedEventArgs(Me.Url))
    End Sub

上記箇所では、Me.ReadyStateがずっとWebBrowserReadyState.Uninitializedのままで、無限ループとなっているようです。
WebBrowserのAllowWebBrowserDropプロパティをFalseにした状態で、これを回避する方法はないでしょうか?
VB2008を使用しています。

引用返信 編集キー/
■53725 / inTopicNo.2)  Re[1]: WebBrowserのリロード時にイベントを検知するには?
□投稿者/ YAS (9回)-(2010/09/25(Sat) 09:25:59)
ファッシオさん,こんにちは。
本当ですね。うまく動きません。一度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

引用返信 編集キー/
■53744 / inTopicNo.3)  Re[2]: WebBrowserのリロード時にイベントを検知するには?
□投稿者/ ファッシオ (2回)-(2010/09/25(Sat) 19:18:31)
No53725 (YAS さん) に返信
YASさん、こんにちは。
もしかして、参考サイトの方でしょうか?
わざわざこちらに書き込み頂きありがとうございました。
YASさんの上記ソースで解決することができました。ありがとうございました。
今後ともよろしくお願い申し上げます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -