VB2010 WebBrowserのボタンを上書き

このQ&Aのポイント
  • VB2010でVB6.0のWebBrowserボタンを上書きする方法について困っています。
  • VB6.0のフォームに配置されたWebBrowserで表示されるa.htmlのボタンをVB2010で上書きする方法を教えてください。
  • HTML上のボタンをクリックした時にVBの関数を呼び出す方法を、web検索で見つけられずに困っています。
回答を見る
  • ベストアンサー

VB2010 WebBrowserのボタンを上書き

お世話になります。 VB6.0→VB2010の移行をしたく、プログラム内の各処理の検証を行っております。 そこで、↓のような処理をVB2010で書き換えられずに困っております。 VBでフォームを用意し、その中にWebBrowser1を配置する。 更に中をhtmlでフレーム分けして、 最終的に「a_frame」というフレームにa.htmlを表示する。 a.htmlには「b_btn」というボタンを配置し、これを押下すると VB上に処理がうつり、記述した処理をこなす。 ------ ■a.html <HTML> <HEAD><TITLE>test</TITLE></HEAD> <body> <INPUT TYPE="button" ID="b_btn" VALUE="b_btn" /> <INPUT TYPE="text" ID="b_txt" VALUE="test!!" /> </BODY> </HTML> ------ ■VB6.0のフォームのコード Private WithEvents m_btn As mshtml.HTMLButtonElement Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object,URL As Variant) 'HTML表示完了時に「b_btn」を上書き Set m_btn = WebBrowser1.Document.Frames("a_frame").Document.getElementById("b_btn")'★ End Sub Private Function m_btn_onclick() As Boolean ' 'HTML上の「b_btn」を押下した場合の処理をここに。 ' m_btn_onclick = True End Function ------ VB2010では Setステートメントがないようで★行部の処理がエラーとなるため、 Setを除いて、(更に右辺をVB2010でエレメントを指定できるように書換えてみて、) m_btn = WebBrowser1.Document.Window.Document.Frames(0).Document.getElementById("b_btn") とやると、ビルドでエラーが出、実行時にもエラーが出ます。 エラー概要:System.Window.Forms.HtmlElementとmshtml.HTMLButtonElement変換時に       ランタイムエラーが発生する可能性があります。 msdnのアップグレードガイドを読んでいると、Setステートメントがなり、 厳密に左辺右辺の形式を合わせる必要があるようなんですが、 合わせられるような指定の仕方を見付けられず・・・。 やはりボタン自体をVBで配置するほかないでしょうか。 同じ場所に配置してある「b_txt」のデータは読み書きできるんですが・・・。 a.htmlにあたる部分を別プログラムにて自動生成しているもので、 できれば大筋が変わらなければいいなぁと思っております。 web検索をしておりますが、検索するワードが良くないためか、 HTML上のボタンをクリックした時にVBの関数を呼ぶ方法を見つけられずにおります。 何かよい方法がありましたらヒントを頂けませんでしょうか。 よろしくお願いいたします。

  • temco
  • お礼率100% (2/2)

質問者が選んだベストアンサー

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

.NETのWebBrowserでmshtmlを使いたいのであれば、WebBrowser.Document.DomDocumentを mshtml.HTMLDocument にキャストする。 http://d.hatena.ne.jp/piy/20100303/1267642518

temco
質問者

お礼

todo36さま アドバイス頂きありがとうございます!早速やってみます!!

temco
質問者

補足

todo36さま ありがとうございます!動作しました!! HTML上のボタンを押下するとVBの関数が呼ばれます。 Private WithEvents mBtn As mshtml.HTMLButtonElement Private mDoc As mshtml.HTMLDocument Private Sub WebBrowser1_DocumentCompleted(...)... mDoc = WebBrowser1.Document.Window.Frames(0).Document.DomDocument mBtn = mDoc.getElementById("b_btn") End Sub Private Function mBtn_onclick() As Boolean Handles mBtn.onclick MsgBox("success!!") mBtn_onclick = True End Function 以上、ご報告です。本当にありがとうございました!!

関連するQ&A

  • WebBrowserコントロール(続き)

    昨日質問したものです。(VB6.0) 出来たと思ったらエラーが出てやっぱり出来ませんでした。 もう3時間挑戦してますがダメです。 例えば a = "<html><body>あいうえおかきく</body></html>" と入ってる場合 コマンドをクリックすれば WebBrowserにaを表示する方法なのですが、、 Private Sub Command1_Click() WebBrowser1.Navigate2 "about:blank" WebBrowser1.Document.Body.Innerhtml = a End Sub これだとエラーが出ます。 何がいけないんでしょう(T_T;;

  • WebBrowserでHtmlを取得

    WebBrowserでHtmlを取得する方法をおしえてください フォーム上に、WebBrowser1、TextBox1、Button1を配置しています。 TextBox1にHtmlを表示し、Button1は、WebBrowser1に表示している WEBページを更新します。 やりたい事  (1)フォームを開いた時に、URLで指定したWEBページを表示させ   TextBox1にHtmlを表示させる。  (2)Button1をクリックした時、表示しているWEBページを更新する。   更新後のHtmlをTextBox1に表示させる。  (3)TextBox1の表示が完了したらHtmlを処理する。(未着手) 現在、(1)は動作するのですが、(2)が動作しません(TextBox1のHtmlが更新されない) Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load WebBrowser1.Navigate(オッズURL):webcompflag = False Do While (webcompflag = False) System.Windows.Forms.Application.DoEvents() System.Threading.Thread.Sleep(10) Loop TextBox1.Text = WebBrowser1.Document.Body.InnerHtml End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox1.Text = "" If Not WebBrowser1.Url.Equals("about:blank") Then WebBrowser1.Refresh() : webcompflag = False Do While (webcompflag = False) System.Windows.Forms.Application.DoEvents() System.Threading.Thread.Sleep(10) Loop TextBox1.Text = WebBrowser1.Document.Body.InnerHtml End Sub 何がいけないのか分かりません よろしくお願いします。

  • (VB)WebBrowserの値が更新されない

    VisualStudio2008の環境でFormにWebBrowserを配置し そこから以下の処理でHtml内の値を取得するプログラムを作成しています。 For Each he_TR As HtmlElement In he_TableChild.GetElementsByTagName("TD") If he_TR.Id = "AAAAA" Then TXT= he_TR.InnerText.ToString .TextBox1.Text = TXT End If Next これを1s間隔のタイマーで動かすと一定時間経過で(5分くらい?)値が取得できなくなります。 アタッチするとTimer処理は行われTextBoxに値を入れる箇所も通っています。 Html内のデータが更新されていない様に思えるのですが何か解決策があればご教示下さい。 下記が起動時のメソッドとなります。 Private Sub View() Me.WebBrowser1.Navigate("") '文字列で指定したURLに飛ぶ Me.WebBrowser1.Navigate("http://www.xxxxxxxxxxxxxxxx/") '完全に表示しきるまでWait Do Application.DoEvents() Loop Until WebBrowser1.ReadyState = WebBrowserReadyState.Complete And WebBrowser1.IsBusy = False 'Dim lngCno As Long, lngTno As Long Timer1.Interval = 1000 Timer1.Start() End Sub

  • WebBrowser内のフォームをsubmitする(VB2008)

    VB2008でWebBrowserコントロール内のsubmitボタンを以下のコードでクリックしようとしているのですが、 WebBrowser1.Document.Forms("フォームの名前").InvokeMember("submit") NullReferenceExceptionはハンドルされませんでした。 オブジェクト参照がオブジェクト インスタンスに設定されていません。 というエラーが出ます。 ボタンがフォームの中ではなく、tableの中に配置されているようで、idも指定されておらず、nameとvalueだけ指定されているのですが何か方法はないでしょうか。 どなたかお願いします。

  • WebBrowserについて

    VB2005で、WebBrowserを使おうとしたところ次のような問題が発生しました。 フォームに、WebBrowserを貼り付けてボタンをクリックしたところsubの途中でStopさせるとWebBrowserに表示されません。どうしてでしょうか?教えてください。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click WebBrowser1.Navigate("http://www.goo.ne.jp/") End Sub の状態だと表示されますが、 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click WebBrowser1.Navigate("http://www.goo.ne.jp/")     Stop End Sub で止めると表示されません。 教えていただけないでしょうか?宜しくお願い致します。

  • WebBrowserでgoogle検索するには?

    WebBrowserを使ってgoogle検索をVBで作ったブラウザ上で行いたいです。 具体的には、 「ComboBoxで選択した値」と「TextBoxで書き込んだキーワード」を &検索したいのですが Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted WebBrowser1.Document.All.GetElementsByName("q")(0).InnerText = TextBox1.Text WebBrowser1.Document.All.GetElementsByName("q")(0).InnerText = ComboBox1.SelectedItem WebBrowser1.Document.Forms(0).InvokeMember("submit") End Sub では、&検索ができません。常にコンボボックスで選択されたものだけが 検索され、しかも無限に検索をします。 対処法を教えていただけないでしょうか?

  • WebBrowserでGmailに自動ログイン

    Excel2002VBAにて、WebBrowserでGmailに自動ログインするコードを書いたのですが 実行してGmailにログインはできるのですが、添付画像のダイアログが出てきてしまいます。 はいを押してもいいえを押しても、消した瞬間にすぐに出てきて困っています。 同じような現象の方はいませんでしょうか? またこのエラーの回避の仕方はどうしたら良いでしょうか? ログイン後の画面では何か処理をするようなコードは書いていません。 ちなみにログインするまでのコードは以下です。 Private Sub WebBrowser1_Documentcomplete(ByVal pDisp As Object, URL As Variant) 'Yahooメールなどにログインする処理 ElseIf i = 4 And URL = "https://www.google.com/accounts/Login?hl=ja&cont … Then i = i + 1 WebBrowser1.Document.getElementsByName("Email")(0).Value = "メールアドレス" WebBrowser1.Document.getElementsByName("Passwd")(0).Value = "パスワード" WebBrowser1.Document.getElementsByName("signIn")(0).Click End Sub よろしくお願いします。

  • webbrowserにappendChildでyahooへのリンクを追加させるには?

    お世話になります。 以下のvb6のコードを見ていただきたいですが bodyタグの中にh1タグしかない簡単なページに <a href="http://www.yahoo.co.jp">ヤフーへ</a> というaタグをウェブブラウザに表示させた際に追加させたいと 思っています。 その際、href属性とhttp://www.yahoo.co.jpという値を つけくわえるコードがわかりません。 {vb.netだと elem.SetAttribute("HREF", http://www.yahoo.co.jp) で記述できるみたいですが、vb6だとコンパイルエラーがでてしまいます} どのようにコーディングすればよろしいでしょうか? 教えてください。お願い致します。 Private Sub Command1_Click() WebBrowser1.Navigate ("http://hoho.hiho.jp/") Do While WebBrowser1.Busy = True '何もしないループ(笑) DoEvents Loop Start = Timer Do While Timer - Start < 2 DoEvents Loop Dim elm As IHTMLElement Set elem = WebBrowser1.Document.createElement("A") elem.innerText = "ヤフーへ" WebBrowser1.Document.body.appendChild (elem) End Sub

  • WebBrowserコントロールでの印刷

    VBのWebBrowserコントロールを使ってHTMLドキュメントの印刷を行う アプリケーションを作っています。 WebBrowser1.ExecWB OLECMDID_PRINT,0 と書くと印刷はできますがヘッダーとフッダーが印刷されてしまいます。 IEの設定を変えると表示されなくなりますが、VBのコード上からここら辺を制御する方法がわかりません。 どなたか分かる方教えてください。 お願いいたします。

  • VB2005のWebBrowserで”クリック”する

    VB2005のWebBrowserを使い、楽天ブログをランダムボタンを自動で押して、ペラペラめくっていきたいと思い、下記プログラムを組みました。 しかし、実際実行すると、プログラムが強制終了。「問題が発生したため、○○.exe(プログラム名) を終了します。 ご不便をおかけして申し訳ありません。」 となってしまいます。 原因、解決策、もしくは代案を教えていただきたいです。 よろしくお願いいたします。 プログラム '楽天ブログの自分のページにアクセス WebBrowser1.Navigate("http://plaza.rakuten.co.jp/○○○○○") 'ランダムボタン(右上のボタン)をクリック WebBrowser1.Document.GetElementsByTagName("a").Item("ランダム").InvokeMember("click")

専門家に質問してみよう