VisualBasic2008ExpressEditionでプログラムしています。


Module1.vb内に、次のような処理をしてくれるPublic Functionを作りたいです。

つきましては、コードをご教示ください。

0. Public Functionの名前はAaaとする。
1. 各種パラメータを受け取る
  1-1. strWbName as String
  1-2. strUrl as String
  1-3. intTimeOut as Integer
  1-4. strResult as String
2. strUrlに格納されているURLを、strWbNameに格納されている名前を持つWebBrowserで表示を試みる
3. 当該WebBrowserでの表示が完全に終了するまで待つ
  3-1. 表示に成功し、全部の表示が終わったら4へ
  3-2. intTimeOutIntervalに格納されているミリ秒が経過したら、タイムアウトする
4. strResultに結果を代入する
  4-1. 表示に成功し、全部の表示が終わったら、strResultに"Success"を代入する
  4-2. タイムアウトしたり、その他のエラーが発生したら、strResultに"Failure"を代入する
5. strResultを返す

回答の条件
  • 1人2回まで
  • 登録:2009/10/26 22:16:16
  • 終了:2009/11/02 22:20:02

回答(2件)

id:HALSPECIAL No.1

HALSPECIAL回答回数407ベストアンサー獲得回数862009/10/27 15:51:53

ポイント60pt

こちらでいかがでしょうか?

成功の場合、リターン値として、True。 さらに引数のstrResult変数に"Success"をセット。

失敗の場合、リターン値として、False。さらに引数のstrResult変数に"Failure"をセット。

しています。

    Public Function Aaa(ByVal strWbName As String, ByVal strUrl As String, ByVal intTimeOut As Integer, ByRef strResult As String) As Boolean
        Dim AllCtrl As Control() = GetAllControls(Me)
        Dim wb As WebBrowser = Nothing
        strResult = "Failure"

       'WebBrowserを探す
       For Each c As Control In AllCtrl
            If c.GetType().Equals(GetType(WebBrowser)) Then
                If c.Name = strWbName Then
                    wb = c
                    Exit For
                End If
            End If
        Next

        If wb Is Nothing Then
            Return False
        End If

        '指定のページへ移動
        wb.Navigate(strUrl)

        '待機
        For i As Integer = 1 To (intTimeOut / 1000 * 5)
            If WebBrowser1.ReadyState = WebBrowserReadyState.Complete Then
                strResult = "Success"
                Return True
            End If
            Application.DoEvents()
            System.Threading.Thread.Sleep(200)
        Next
        'タイムアウトの為、停止
        WebBrowser1.Stop()

        Return False
    End Function

    Private Function GetAllControls(ByVal top As Control) As Control()
        'http://www.atmarkit.co.jp/fdotnet/dotnettips/224controls/controls.html
        Dim buf As ArrayList = New ArrayList
        For Each c As Control In top.Controls
            buf.Add(c)
            buf.AddRange(GetAllControls(c))
        Next
        Return CType(buf.ToArray(GetType(Control)), Control())
    End Function

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 freemann 307 239 49 2009-10-30 00:02:00

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません