none
VBからWebbrowserのコントロール RRS feed

  • 質問

  • 始めまして。
    今VBの勉強中の者です
    WebBrowserコントロールについてなのですが

    ブラウザ上のDocumentオブジェクトへのアクセスはどのようにしたらいいでしょう

    ブラウザコンポーネントを使用し、

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    WebBrowser1.Navigate("http://www.hogehoge.co.jp")
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    WebBrowser1.Document.All.tags("INPUT")(1).click()
    End Sub

    とした場合、tagsはメンバに存在しませんというエラーでコンパイルできません
    VB6.0ではコンパイル時に存在しないメンバがあってもコンパイルでき、実行時に(そのページを読み込んでさえいれば)なんの問題もなく実行できたのですが・・・

    コンパイル時にエラーにならないようには宣言などをどのようにすればエラーにならないでしょうか
    2006年4月23日 15:41

回答

  • 旧VB(VB6とそれ以前)の記憶は捨ててください。VB.NET(VB7)以降はほぼ全くの別言語です。

    System.Windows.Forms.WebBrowser クラスやその関連クラスは、飽くまで .NET のクラスであり、COM オブジェクトではありません。当然 IDispatch も持っていないので、未知のメソッドを遅延バインディングすることはできません。公開しているメンバがそのまま使えるメンバです。

    さて、WebBrowser1.Document.All は、ドキュメントを見ていくと HtmlElementCollection 型であることが分かります。これは .NET の型であり、COM オブジェクトとは直接関係ありません。当然の事ながら、HtmlElementCollection が公開しているメンバはドキュメントに書かれているメンバだけで、それ以外は含まれていません。当然、Tags なんてメンバも含まれていません。HtmlElementCollection から要素を取得するのは一般に Item プロパティを使いますが、これの文字列を引数に取るオーバーロードは、ドキュメントを読めば一目瞭然ですが要素名ではなく name 属性または id 属性を検索するものです。

    要素名で要素のコレクションを取得したいのなら、HtmlDocument 型にある GetElementsByTagName メソッドを使う必要があります。

    また、HtmlElementCollection から目的の要素オブジェクトを取得したとして、その要素オブジェクトもまた HtmlElement という .NET の型のオブジェクトです。HtmlElement には click メソッドなど定義されていませんから、当然使うことはできません。HTML DOM で定義されている、要素特有のメソッドを実行する場合、HtmlElement のInvokeMember メソッドを使って文字列で指定することになります。

    2006年4月23日 16:10