フォームの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からやっと標準コントロールとして組み込まれました。これまでも、ツールボックスに追加すれば使用できましたが、ヘルプがないため、プロパティやメソッド、イベントの使い方がよく分かりませんでした。これで気持ちよくブラウザのプログラミングができるようになりました。

