DOBON.NET DOBON.NETプログラミング掲示板過去ログ

AxWebBrowserの戻る・進むのタイミング

環境/言語:[WindowsXP VB.NET]
分類:[.NET]

始めての書き込みです。よろしくお願いします。

現在、VB.net 2003でブラウザを作っています。
IEコンポネートを使用したものです。ちなみに私のPCにインストールされているIEはIE6です。

メインメニューに「戻る」と「進む」を作り、それを押したことによってAxWebBrowserのページが移動する、というところまでは出来ています。
しかし、戻れるページがないのにも関わらず「戻る」ボタンがクリックできてしまうため、エラーが発生しプログラムが終了してしまいます。(進むも同様です)

なので、戻れる場合はボタンのEnabledをtureに、戻れない場合はfalseにしてボタンをクリックできないようにしようと考えています。
しかし、前のページがあるのか(戻れるページがあるのか)調べる方法がわかりません。

いろいろと調べてみた結果、
http://support.microsoft.com/default.aspx?scid=/isapi/gomscom.asp?target=/japan/support/kb/articles/jp163/2/82.asp
http://uchukamen.com/Programming1/WebBrowser/index.htm
など、これについて書かれているサイトを発見しましたが、理解できませんでした。(試してみましたが、エラーが出てしまい私の知識では対処できませんでした)

返答を頂ける方がおられましたら、解説を付けて頂くと有り難いです。
エラーが出るならそのエラーを書いてください。
エラーが出ます、だけじゃそうですか大変ですねとしか言いようがありません。

それはさておき、CommandStateChange でぐぐったらほぼ先頭に
「Visual Basic .NET または Visual Basic 2005 WebBrowser コントロールの進むボタンと戻るボタンを使用する方法」
なんて support.microsoft.com の記事が見つかりましたが?
失礼しました。
「[InetSDK] WebBrowser コントロールでの [進む] と [戻る] ボタンの使い方」
を見ただけで、
「Visual Basic .NET または Visual Basic 2005 WebBrowser コントロールの進むボタンと戻るボタンを使用する方法」
を見ていませんでした。

「Visual Basic .NET または Visual Basic 2005 WebBrowser コントロールの進むボタンと戻るボタンを使用する方法」
を参考に、Visual Basic2005で同じサンプルプログラムを組んでみましたが、2005ではCommandStateChangeメソッドが無かったためかエラーが出てしまいました。

そこで、CanGoForwardChanged、CanGoBackChangedメソッドを使用した結果解決致しました。

掲示板の規則に従い、解決結果を書きます。Visual Basic2005で、Visual Basic2003ではCanGoBackchangedなどのメソッドが無いためこの方法は不可能?

Form1に、Button1(戻る担当)、Button2(進む担当)、WebBrowser1、TextBox1(アドレス入力)、Button3(移動担当)を配置しました。
コードですが、以下のものです。

Public Class Form1
Private Sub WebBrowser1_CanGoBackChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles WebBrowser1.CanGoBackChanged
If WebBrowser1.CanGoBack Then
Button1.Enabled = True
Else
Button1.Enabled = False
End If
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
WebBrowser1.GoBack()
End Sub

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

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Button1.Enabled = False
Button2.Enabled = False
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
WebBrowser1.Navigate(TextBox1.Text)
End Sub

Private Sub WebBrowser1_CanGoForwardChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles WebBrowser1.CanGoForwardChanged
If WebBrowser1.CanGoForward Then
Button2.Enabled = True
Else
Button2.Enabled = False
End If
End Sub
End Class

順番など、滅茶苦茶ですが、これで移動できない場合はボタンのEnabledがfalseに、できない場合はtrueになりました。

よって、2005に2003で作ったものを書き直そうと思っています。

ちなみに、Visual Basic2003にて
「Visual Basic .NET または Visual Basic 2005 WebBrowser コントロールの進むボタンと戻るボタンを使用する方法」
を参考に、
Public Class Form1
Inherits System.Windows.Forms.Form
Private Const CSC_NAVIGATEFORWARD As Integer = 1
Private Const CSC_NAVIGATEBACK As Integer = 2

Private Sub AxWebBrowser1_CommandStateChange(ByVal sender As Object, ByVal e As AxSHDocVw.DWebBrowserEvents2_CommandStateChangeEvent) Handles AxWebBrowser1.CommandStateChange
' e.command identifies the effected button
Select Case e.command
Case CSC_NAVIGATEBACK 'Back button
' Enable OR Disable the Back button
MenuItem6.Enabled = e.enable
Case CSC_NAVIGATEFORWARD 'Forward button
' Enable OR Disable the Forward button
MenuItem9.Enabled = e.enable
End Select
End Sub
End Class

menuitem6とmenuitem9はそれぞれ、戻る、進む担当のボタンです。
Form1のロードイベントに
Menuitem6.Enabled = False
Menuitem9.Enabled = False
としてみましたが、テストしてみると、EnabledがTrueになっているようでクリックできしまい、エラーが出てしまいます。(戻れるページがないためだと思われます)

コードが見にくいかもしれません、すいません。

DOBON.NET | プログラミング道 | プログラミング掲示板