フォームのLoadイベント処理
ここではフォームのLoadイベントで、タブページに組み込んであるWebBrowserコントロール(WebBrowser1)に、CodeZineのホームページを表示することにします。
これはWebBrowser
クラスのNavigate
メソッドを使用して行います。このメソッドは、引数に指定したURLのWebページを表示します。
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Me.WebBrowser1.Navigate("http://codezine.jp/") End Sub
Navigate
メソッドがWebページの転送を完了すると、WebBrowserコントロールでDocumentCompletedというイベントが発生するので、このイベントハンドラで、読み込んだURLをタブページのタブに表示します。
タブの文字表示はTabPage
クラスのText
プロパティを使用します。また、表示しているWebページのURLはWebBrowser
クラスのUrl
プロパティで取得できますが、このプロパティの値はオブジェクトになっているのでToString
メソッドで文字列に変換します。
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, _ ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) _ Handles WebBrowser1.DocumentCompleted Me.GcTabPage1.Text = Me.WebBrowser1.Url.ToString End Sub
新しいタブページを追加する処理
次は、新しいタブページをGcTabControlコントロールに追加する処理を作成します。
ユーザーがタブページのタブをクリックすると、GcTabControlコントロールでSelectedというイベントが発生します。そこで、このイベントハンドラに新しいタブページを追加する処理を記述します。
Private Sub GcTabControl1_Selected(ByVal sender As Object, _ ByVal e As GrapeCity.Win.TabPlus.TabControlEventArgs) _ Handles GcTabControl1.Selected End Sub
- まず、クリックされたタブページが空白のページなのかどうかをチェックします。前述のように、タブページの追加は空白のタブをクリックしたときに限って行います(さもないと、表示するWebページを切り替えるたびにタブが追加され、ブラウザ内がタブページだらけになってしまいます)。
- 空白のページが選択されたときはタブページを追加して、そこにWebBrowserコントロールを組み込みます。
If Me.GcTabControl1.SelectedTab.Text <> "" Then Exit Sub End If
WebBrowser
クラスのインスタンスを作成します。Dim wb As New WebBrowser()
WebBrowser
クラスのメンバとして決まっていますので、ここでは「DocumentCompleted」と「Navigated」の2つのイベントを処理するようにします。「DocumentCompleted」は、Webページのコンテンツがすべて転送されたときに発生し、「Navigated」はWebサイトに移動したときに発生します。AddHandler wb.DocumentCompleted, _ New WebBrowserDocumentCompletedEventHandler( _ AddressOf DocumentCompleted) AddHandler wb.Navigated, _ New WebBrowserNavigatedEventHandler(AddressOf Navigated)
- タブページを追加します。フォームに組み込んだGcTabControlコントロールからTabPageCollectionへの参照を作成し、このコレクションにタブページを追加する、という形をとります。
Dim tbcol As New GrapeCity.Win.TabPlus.GCTabControl. _ TabPageCollection(Me.GcTabControl1)
GCTabPage
オブジェクトを作成し、これをTabPageCollectionコレクションにAdd
メソッドを使って追加します。Dim NewTab As New GrapeCity.Win.TabPlus.GCTabPage tbcol.Add(NewTab)
- 作成したWebBrowserコントロールの
Dock
プロパティをFillに設定し、作成したGCTabPage
オブジェクトに組み込みます。
wb.Dock = DockStyle.Fill NewTab.Controls.Add(wb)
これで空白のタブを選択すると、WebBrowserコントロールを持ったタブページがもう1ページ追加されるようになります。
WebBrowserコントロールのイベント処理
WebBrowserコントロールのイベント処理用プロシージャを作成します。プロシージャは、必ずAddHandlerステートメントで宣言したプロシージャと同じ名前で作成します。
Navigatedプロシージャは、Webサイトに移動を開始すると実行されます。ここでは、ツールバーにあるアクセスボタンのアイコンの点滅を開始します。これは、TimerコントロールのEnabled
プロパティをTrueにして行います。
Private Sub Navigated(ByVal sender As Object, _ ByVal e As WebBrowserNavigatedEventArgs) Me.Timer1.Enabled = True End Sub
DocumentCompletedプロシージャは、Webページのすべての表示が完了すると呼び出されて実行します。
ここでは、Timerコントロールを停止させ、ツールバーのアクセスボタンのアイコンを表示状態にします。
Private Sub DocumentCompleted(ByVal sender As Object, _ ByVal e As WebBrowserDocumentCompletedEventArgs) Me.GcTabControl1.SelectedTab.Text = e.Url.ToString Me.Timer1.Enabled = False Me.ToolStripButtonAccess.Visible = True End Sub
追加されたタブページが選択されたときの処理
新しいページが追加された後に、このページのタブをクリックすると、タブのタイトルが「NewPage」に設定されるようにします。これには、GcTabControl
クラスのSelectedIndexChangedイベントを利用します。
Private Sub GcTabControl1_SelectedIndexChanged(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles GcTabControl1.SelectedIndexChanged If Me.GcTabControl1.SelectedTab.Text = "" Then Me.GcTabControl1.SelectedTab.Text = "New Page" End If End Sub
[Go]ボタンが押されたときの処理
テキストボックスに入力されたURLを取得し、Navigate
メソッドを実行します。
ただし、どのタブページのブラウザに表示するのかが問題になってきます。ここでは、アクティブなページ(選択されているタブページ)のブラウザに表示します。
- テキストボックスの入力からURL文字列を取得します。
- 次に、アクティブなページの
WebBrowser
オブジェクトを取得します。
Dim NewUrl As String = Me.ToolStripTextBoxUrl.Text
GcTabControl
クラスの.SelectedTab
プロパティで取得できます。そして、For Each...Next
ステートメントを使用し、このタブページ上のコントロールコレクションからWebBrowserコントロールだけを取得し、Navigate
メソッドを実行します。For Each tabwb As WebBrowser _ In Me.GcTabControl1.SelectedTab.Controls tabwb.Navigate(NewUrl) Next End Sub
「中止」「更新」「前に進む」「戻る」の処理
これらは、ツールバーの各ボタンのClickイベントプロシージャで、WebBrowser
クラスの次のメソッドを実行するだけです。なお、「前に進む」「戻る」はエラーが発生する可能性があるので、Try...Catch
ステートメントで例外処理を行います。
処理 | メソッド |
中止 | Stop |
更新 | Refresh |
前に進む | GoForward |
戻る | GoBack |
Private Sub ToolStripButtonStop_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles ToolStripButtonStop.Click For Each tabwb As WebBrowser In Me.GcTabControl1.SelectedTab.Controls tabwb.Stop() Next End Sub Private Sub ToolStripButtonReload_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles ToolStripButtonReload.Click For Each tabwb As WebBrowser In Me.GcTabControl1.SelectedTab.Controls tabwb.Refresh() Next End Sub Private Sub ToolStripButtonGoFwd_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles ToolStripButtonGoFwd.Click Try For Each tabwb As WebBrowser In Me.GcTabControl1.SelectedTab.Controls tabwb.GoBack() Next Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Private Sub ToolStripButtonGoBack_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles ToolStripButtonGoBack.Click Try For Each tabwb As WebBrowser In Me.GcTabControl1.SelectedTab.Controls tabwb.GoForward() Next Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub
[タブページを閉じる]ボタンの処理
このボタンは選択されているタブページを削除します。GcTabControl
クラスのSelectedTab
プロパティで選択されているタブページを取得し、Dispose
メソッドを実行します。
このとき、全部のタブページを削除しないように、TabPagesコレクションのCount
プロパティでページの数をチェックし、最低1ページは残るようにします。
Private Sub ToolStripButtonClose_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles ToolStripButtonClose.Click If Me.GcTabControl1.TabPages.Count > 1 Then Me.GcTabControl1.SelectedTab.Dispose() End If End Sub
アクセスボタンの点滅処理
これは、TimerコントロールのTickイベントプロシージャでボタンの表示/非表示を繰り返して、点滅のアニメーションを作成します。
Dim flag As Boolean = False Private Sub Timer1_Tick(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Timer1.Tick If flag = False Then Me.ToolStripButtonAccess.Visible = False flag = True Else Me.ToolStripButtonAccess.Visible = True flag = False End If End Sub
まとめ
TabPlus for .NET 2.0J のGcTabControlコントロールを使って、タブブラウザを作成してみました。
GcTabControlコントロールは、さまざまな形状のタブをデザインできる面白いコントロールです。実行時にタブを追加したり削除することができ、MDIフォームにも対応しているので、Webブラウザ以外にもいろいろなアプリケーションを作成することができます。
また、WebBrowserコントロールは、.NET Framework 2.0からやっと標準コントロールとして組み込まれました。これまでも、ツールボックスに追加すれば使用できましたが、ヘルプがないため、プロパティやメソッド、イベントの使い方がよく分かりませんでした。これで気持ちよくブラウザのプログラミングができるようになりました。