VB2008使用です。
WebBrowserがロード完了したことを受け取る方法を知りたいです。
IEを起動するパターンですと、以下のような方法がありましたが
WebBrowserを使用する場合どのような方法がありますでしょうか?
WebBrowserロードが完了してから次の動作に移りたいです。
'IEを起動する
objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
objIE.Visible = True
objIE.Navigate(strNAME)
'開ききるまで待つ処理。
Do While objIE.Busy = True '特に何もしないで.Busyの状態が変わるまで待つ
Loop
Do While objIE.ReadyState <> 4 '特に何もしないで.ReadyStateの状態が4に変わるまで待つ
Loop
読み込み完了時には、DocumentCompleted イベントが発生しますので、
そこで「次の動作」を行うようにすれば OK です。
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.webbrowser.documentcompleted.aspx
> '開ききるまで待つ処理。
ループ待機は避けた方が良いかと思いますよ。
たとえば、「CheckBox がチェックされたときに処理を開始する」場合、
チェックされたかどうかをループ監視したりはしないですよね。
通常はイベントを使って処理されているかと思います。それと同じことです。
InternetExplorer オブジェクトも、WebBrowser と同様に、
DocumentCompleted イベントで処理することができます。
http://msdn.microsoft.com/en-us/library/aa768329.aspx
上記確認させていただいたのですが、いまいちよくわかりません。
WebBrowser.DocumentCompletedについてなのですが
簡単なサンプルいただけませんでしょうか?
>>> WebBrowserロードが完了してから次の動作に移りたいです。
> 簡単なサンプルいただけませんでしょうか?
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
'ここに「次の動作」を記述
End Sub
魔界の仮面弁士 様ご指導ありがとうございます。
魔界の仮面弁士 様のソースを設置してみたところ確かに初回はおもう動作をするのですが
以下ような形にしたいです。
①ボタンを押す
I = 1
Do i = 5
"http://aaa.com/" + i + "html" 'を開く
'(完了まで待つ)
i = i +1
Loop
> Do i = 5
Do While では無さそうなので、Do Until の意味でしょうか。
であれば、こうかな…。
Public Class Form1
Private htmlIndex As Integer
Private Sub Navigate(ByVal index As Integer)
Dim URL As String = String.Format("http://aaa.com/{0}.html", index)
WebBrowser1.Navigate(URL)
End Sub
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
Me.Text = e.Url.ToString()
htmlIndex += 1
If htmlIndex < 5 Then
Navigate(htmlIndex)
End If
End Sub
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
htmlIndex = 1
Navigate(htmlIndex)
End Sub
End Class
たびたびありがとうございます。
上記のソースだと、ループや連続でボタンを押したときに読み込みが終了するまえに、次のナビゲートにいってしまいます。。。
> 上記のソースだと、ループや連続でボタンを押したときに読み込みが終了するまえに、次のナビゲートにいってしまいます。。。
連続押下に関しては、最初の Click 時に Button1.Enabled = False 等を
仕込んでおけば対処できますね。
ところで、ここでいうループとは、どのような意味でしょうか?
Loop ステートメントの意味だとすれば、そもそも私のソースでは
それを使わないようなコードにしているはずです。
Navigate によって、次の DocumentCompleted イベントが発生するという点では
確かにループ処理であると言えますが、それは読み込みが終了した後に
起きることであって、読み込み完了前に起きることは無いと思いますよ。
ただし、framesetが利用されている Webページを表示させた場合は別です。
フレームがあると、それぞれのフレームごとに DocumentCompleted が発生します。
そのため先のコードでフレーム付きのページを読み込ませた場合、内側のフレームの
読み込み完了時にも htmlIndex が増加してしまいます。それを避ける必要が
ある場合には、DocumentCompleted にて e.URL をチェックするようにしてみてください。