AxWebBrowserで画像を読み込まない設定でイベントを取得するには?

解決


まりの  2006-05-08 03:48:06  No: 95289

2005/12/11のVB梅さんの書き込みを参考にして、AxWebBrowserで画像の読み込みをしないようにすることができました。ただ、ラッパークラスのWebBrowserからinnerHTMLを読み込んだり、データを入力することはできるのですが、TitlechangeやDocumentCompleteなどのイベントを拾うことができません。初心者のため、こうなると、なかなか応用ができません。具体的にどのようにすればできるのか、ご存じの方教えてください。よろしくおねがいいたします。
WindowsXP、vb.netのバージョンはDevelopment Environment 2003, .NET Framework 1.1 です。

以下のようなコードだと、AxWebBrowser_DocumentComplete1のところで「HANDLES句にはWithEvents変数が必要です」のメッセージがでます。Handles句がラッパークラスのWebBrowserとリンクしてなんだと思いますが・・・

Imports WebBrowser_TEST.SantaMarta.ComInterop
Imports WebBrowser_TEST.SantaMarta.WebBrowsing

Public Class Form1
    Inherits System.Windows.Forms.Form

    Public BrowserWrapper As New BrowserWrapper
    Public AxWebBrowser = BrowserWrapper.AxWebBrowser

    Dim doc As mshtml.HTMLDocument

    Public Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Me.Controls.Add(AxWebBrowser)
        Me.AxWebBrowser.Enabled = True
        Me.AxWebBrowser.Location = New System.Drawing.Point(25, 120)
        Me.AxWebBrowser.Size = New System.Drawing.Size(600, 300)

         '画像を読み込まない設定
        BrowserWrapper.DownloadImages = False
        BrowserWrapper.ExecuteAxControls = False
        BrowserWrapper.ExecuteScripts = False
        BrowserWrapper.Show()
        'AxWebBrowser.Navigate("http://www.xxx/")

    End Sub

    Private Sub AxWebBrowser_DocumentComplete1(ByVal sender As Object, ByVal e As AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent) Handles AxWebBrowser.DocumentComplete
        Label2.Text = e.text
        TextBox1.Text = Me.AxWebBrowser.LocationURL
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        doc = AxWebBrowser.Document

'ドキュメント取得
        TextBox2.Text = doc.documentElement.innerHTML
'データ入力
        AxWebBrowser.Document.Forms(0).Elements(4).value = "3"
        AxWebBrowser.Document.Forms(0).Elements(5).value = "てすと"

    End Sub
End Class

長くなってすいません


VB梅  2006-05-08 22:10:09  No: 95290

>以下のようなコードだと、AxWebBrowser_DocumentComplete1のところで「HANDLES句にはWithEvents変数が必要です」のメッセージがでます。Handles句がラッパークラスのWebBrowserとリンクしてなんだと思いますが・・・

正解!

WithEventsを設ければOKです。
BrowserWrapper.AxWebBrowserにも、ちょこまか追加ソースが必要ですが・・・
手元に私のソースが無いので詳しく説明できません^^;

"WithEvents 時計 Handles"  等で検索すれば、ヒントとなるソースが見つかります。ガンバです!

後ほど、ソースと説明付けておきますね。


VB梅  2006-05-09 05:21:37  No: 95291

まりの さん  こんにちわ

イベントを追加するには
クラス  BrowserWrapper をご覧ください

Friend AxWebBrowser As AxSHDocVw.AxWebBrowser = New AxSHDocVw.AxWebBrowser

Friend WithEvents AxWebBrowser As AxSHDocVw.AxWebBrowser = New AxSHDocVw.AxWebBrowser
でWithEventsを追加します。

上の直下でもいいのですが
        Public Event WebBrowser_DocumentComplete()

        Private Sub AxWebBrowser_DocumentComplete(ByVal sender As Object, ByVal e As AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent) Handles AxWebBrowser.DocumentComplete
            RaiseEvent WebBrowser_DocumentComplete()
        End Sub
を追記します。
内容はAxWebBrowser_DocumentCompleteのイベントが発生したらWebBrowser_DocumentCompleteのイベントを起動する?って感じでしょうか

フォームの
Public BrowserWrapper As New BrowserWrapper

Private WithEvents BrowserWrapper As BrowserWrapper = New BrowserWrapper

とします。

後は、クラスで作成したイベント「WebBrowser_DocumentComplete」を
フォームで呼び出せます。
Handles AxWebBrowser.DocumentComplete
では無く
Handles BrowserWrapper.WebBrowser_DocumentComplete
としてイベントを拾うことができます。

他のイベントも同じ要領です。

他の方法もあるのかも知りませんが、私はこのようにイベントを取得しています。


まりの  2006-05-09 06:27:01  No: 95292

VB梅  様
丁寧に解説していただきありがとうございます。
さっそくこれから試してみます。


まりの  2006-05-09 22:08:55  No: 95293

VB梅さん、お世話になってます

VB梅さんの解説に従って必要な修正をしたところ、フォームのコードのところで以下のエラーがでました。

メソッド 'AxWebBrowser_DocumentComplete' でイベント 'WebBrowser_DocumentComplete' を処理できません。指定されているシグニチャが異なります。

このエラーは、「指定したイベント ハンドラのパラメータまたはパラメータの型が、指定したイベントについて定義されたパラメータまたはパラメータの型と一致しません。」という意味のようですが、どこに問題があるのでしょうか。対処方法を教えていただければと思います。

フォーム側のコードは以下のようなものです。
Private Sub AxWebBrowser_DocumentComplete(ByVal sender As System.Object, ByVal e As AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent) Handles BrowserWrapper.WebBrowser_DocumentComplete
        Label2.Text = e.uRL
        TextBox1.Text = Me.AxWebBrowser.LocationURL
    End Sub

また、VB梅さんのBrowserWrapper を参考にして作ったんですが、
Friend AxWebBrowser As AxSHDocVw.AxWebBrowser = New AxSHDocVw.AxWebBrowser
のコードがもともとなかったのも気になります。
ご指摘の「Friend WithEvents....」は新しく追加しました。


VB梅  2006-05-10 00:50:19  No: 95294

>のコードがもともとなかったのも気になります。
そういえば、結構シンプルに変更したので
現在私が使用しているものと以前のものとは違うのですね。

フォームのコードがやたら長いですね^^;
自動生成で記述したコードでしょうか?
>Private Sub AxWebBrowser_DocumentComplete(ByVal sender As System.Object, ByVal e As AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent) Handles BrowserWrapper.WebBrowser_DocumentComplete

Private Sub AxWebBrowser_DocumentComplete() Handles BrowserWrapper.WebBrowser_DocumentComplete
となると思います。

また、e.uRLの値を取得したい場合は  おのずと答えが見えてくると思います。

自動生成で記述したコードについて、
フォームのコードを開いたときタブの下にリストボックスが並んで二つあると思うのでうすが、左のリストボックスでBrowserWrapperを選び
次に右のリストボックスでWebBrowser_DocumentCompleteを選ぶ事で記述されます。

選べなければBrowserWrapperの
>ご指摘の「Friend WithEvents....」は新しく追加しました。
がきになります。

あと、VB.NET2003のヘルプ
Visual Basic 言語リファレンスで   
[Event ステートメント]
を参考にすると良いでしょう


まりの  2006-05-10 17:18:45  No: 95295

VB梅  様
おかげさまでイベント取得することができました^^)/
いろいろ教えて頂きありがとうございました。
e.uRLもしっかりゲットです。

今後ともよろしくお願い致します。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加