SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(ComponentOne)

IE 7やNetscape 7風のタブページ型Webブラウザを作成する

GcTabControlコントロールでタブブラウザを自作する

  • このエントリーをはてなブックマークに追加

フォームの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
  1. まず、クリックされたタブページが空白のページなのかどうかをチェックします。前述のように、タブページの追加は空白のタブをクリックしたときに限って行います(さもないと、表示するWebページを切り替えるたびにタブが追加され、ブラウザ内がタブページだらけになってしまいます)。
  2. そこで、空白のページ以外のページが選択されたときは、新しいページの追加をしないようにします。
    If Me.GcTabControl1.SelectedTab.Text <> "" Then
        Exit Sub
    End If
    
  3. 空白のページが選択されたときはタブページを追加して、そこにWebBrowserコントロールを組み込みます。
  4. まず、WebBrowserクラスのインスタンスを作成します。
    Dim wb As New WebBrowser()
    
    次に、このオブジェクト用のイベントハンドラを作成し、結び付けます。
    AddHandlerステートメントは、実行時にイベントをイベントハンドラに関連付けます。ステートメントには、処理するイベントの名前とイベントを処理するプロシージャの名前を記述します。
    イベントの名前は既にWebBrowserクラスのメンバとして決まっていますので、ここでは「DocumentCompleted」と「Navigated」の2つのイベントを処理するようにします。「DocumentCompleted」は、Webページのコンテンツがすべて転送されたときに発生し、「Navigated」はWebサイトに移動したときに発生します。
    AddHandler wb.DocumentCompleted, _
        New WebBrowserDocumentCompletedEventHandler( _
        AddressOf DocumentCompleted)
    AddHandler wb.Navigated, _
        New WebBrowserNavigatedEventHandler(AddressOf Navigated)
    
    処理を実行するプロシージャは、後で作成します。
  1. タブページを追加します。フォームに組み込んだGcTabControlコントロールからTabPageCollectionへの参照を作成し、このコレクションにタブページを追加する、という形をとります。
  2. 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)
    
  1. 作成したWebBrowserコントロールのDockプロパティをFillに設定し、作成したGCTabPageオブジェクトに組み込みます。
  2. 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メソッドを実行します。

 ただし、どのタブページのブラウザに表示するのかが問題になってきます。ここでは、アクティブなページ(選択されているタブページ)のブラウザに表示します。

  1. テキストボックスの入力からURL文字列を取得します。
  2. Dim NewUrl As String = Me.ToolStripTextBoxUrl.Text
    
  3. 次に、アクティブなページのWebBrowserオブジェクトを取得します。
  4. アクティブなページは、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ステートメントで例外処理を行います。

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

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
ComponentZine(ComponentOne)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/659 2008/08/20 13:10

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング