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
長くなってすいません
>以下のようなコードだと、AxWebBrowser_DocumentComplete1のところで「HANDLES句にはWithEvents変数が必要です」のメッセージがでます。Handles句がラッパークラスのWebBrowserとリンクしてなんだと思いますが・・・
正解!
WithEventsを設ければOKです。
BrowserWrapper.AxWebBrowserにも、ちょこまか追加ソースが必要ですが・・・
手元に私のソースが無いので詳しく説明できません^^;
"WithEvents 時計 Handles" 等で検索すれば、ヒントとなるソースが見つかります。ガンバです!
後ほど、ソースと説明付けておきますね。
まりの さん こんにちわ
イベントを追加するには
クラス 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
としてイベントを拾うことができます。
他のイベントも同じ要領です。
他の方法もあるのかも知りませんが、私はこのようにイベントを取得しています。
VB梅 様
丁寧に解説していただきありがとうございます。
さっそくこれから試してみます。
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....」は新しく追加しました。
>のコードがもともとなかったのも気になります。
そういえば、結構シンプルに変更したので
現在私が使用しているものと以前のものとは違うのですね。
フォームのコードがやたら長いですね^^;
自動生成で記述したコードでしょうか?
>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 ステートメント]
を参考にすると良いでしょう
VB梅 様
おかげさまでイベント取得することができました^^)/
いろいろ教えて頂きありがとうございました。
e.uRLもしっかりゲットです。
今後ともよろしくお願い致します。
ツイート | ![]() |