none
webbrowserの時間待ち? RRS feed

  • 質問

  • こんにちは

    VB2008です。

    配列に入れたURLを連続で巡回させています。

    ある語句があればマウスがおされるまで処理を中断させたいのですがどうすればいいですか?

    hai2はURLとりあえずhai2(0)でテストしています

    ff にはwebbrowserの文字列を格納。

    kee1は検索文字列。

     

    WebBrowser1.Navigate(hai2(0))

            While WebBrowser1.IsBusy
                Application.DoEvents()
            End While
            While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
                Application.DoEvents()
                Me.WebBrowser1.ScriptErrorsSuppressed = True
            End While
            ff = Me.WebBrowser1.Document.Body.OuterText
            d = InStr(ff, kee1)
            If d > 0 Then
                ここにマウスクリックされるまで待機させたい

         (マウスがクリックされたらフレームのテキストを取得したいのです。)

            Else
                TextBox1.Text = Me.WebBrowser1.Document.Window.Frames.Item(0).Document.Body.OuterHtml
            End If

     

     

     

    検索文字が無い場合はそのままフレームの文字列取得します。

    2008年9月16日 12:41

回答

  • コード的には以下のようにしてできるようですが、そこに書かれているようにイベントドリブンの流れを切りますので、お勧めではありません。

     

    クローズイングイベント
    http://dobon.net/vb/bbs/log3-1/320.html

     

    解決策として、メッセージボックスを出して待機するのがわかりやすく、かつ、安全なコードですが、メッセージボックスのようなものが出て欲しくないのでしょうか?

    メッセージボックスのようなものが出なければユーザーインターフェース的にわかりづらいと思うのですが、もしそれでも事情があってどうしても出したくないということであれば、if文内で待機せず、例えばif文内で「読み込むデータありフラグ」をオンにして抜け、マウスクリックイベントでそのフラグを見て、オンなら読み込み処理を実際に行うような設計にすればいいんじゃないかと思います。

    2008年9月16日 14:52
    モデレータ
  •  

    おはようございます。

    trapemiyaさん

     

    Threading.Thread.Sleep(150)という風にプログラムを中断させてみましたがダメでした。

    メッセージボックスは出したくないです。

    webbrowser上でマウスクリックされたかの判断はどうするのですか?

     

     

    2008年9月16日 23:28
  • trapemiyaさんが定時されたUrlにある、FormのWinProcをoverrideしてマウスがクリックされたときのメッセージを処理する、という方法を取る必要があります。

    2008年9月17日 0:08
  • あ~、WebBrowserではマウスクリックイベントが取れないんでした。すみません。GX999さんが書かれている通りですが、以下が大変参考になると思います。

     

    VB2005のWebBrowserコントロールにMouseDownイベントを拡張する
    http://homepage1.nifty.com/yasunari/VB/VB2005/WebBrowserMouseDownEvent.htm

    2008年9月17日 1:19
    モデレータ

すべての返信

  • コード的には以下のようにしてできるようですが、そこに書かれているようにイベントドリブンの流れを切りますので、お勧めではありません。

     

    クローズイングイベント
    http://dobon.net/vb/bbs/log3-1/320.html

     

    解決策として、メッセージボックスを出して待機するのがわかりやすく、かつ、安全なコードですが、メッセージボックスのようなものが出て欲しくないのでしょうか?

    メッセージボックスのようなものが出なければユーザーインターフェース的にわかりづらいと思うのですが、もしそれでも事情があってどうしても出したくないということであれば、if文内で待機せず、例えばif文内で「読み込むデータありフラグ」をオンにして抜け、マウスクリックイベントでそのフラグを見て、オンなら読み込み処理を実際に行うような設計にすればいいんじゃないかと思います。

    2008年9月16日 14:52
    モデレータ
  •  

    おはようございます。

    trapemiyaさん

     

    Threading.Thread.Sleep(150)という風にプログラムを中断させてみましたがダメでした。

    メッセージボックスは出したくないです。

    webbrowser上でマウスクリックされたかの判断はどうするのですか?

     

     

    2008年9月16日 23:28
  • trapemiyaさんが定時されたUrlにある、FormのWinProcをoverrideしてマウスがクリックされたときのメッセージを処理する、という方法を取る必要があります。

    2008年9月17日 0:08
  • あ~、WebBrowserではマウスクリックイベントが取れないんでした。すみません。GX999さんが書かれている通りですが、以下が大変参考になると思います。

     

    VB2005のWebBrowserコントロールにMouseDownイベントを拡張する
    http://homepage1.nifty.com/yasunari/VB/VB2005/WebBrowserMouseDownEvent.htm

    2008年9月17日 1:19
    モデレータ
  • こんばんは

    御提示いただいた内容はまだ、僕には理解できませんので

    もう少し勉強してからチャレンジしたいと思います。

     

    2008年9月17日 16:35