C#.NETメモ:タブブラウザの作成(▲屮薀Ε競據璽献ラス)

【項目】
○タブブラウザの作成:概要
.織峇浜クラス
▲屮薀Ε競據璽献ラス
ブラウザコントロールクラス
IEブックマークツリークラス

概要のページにプロジェクトごとzipで置いてあります。
※この記事の一番下にもこのクラス全体のソースは記載しています。





MyTabBrowserクラスではTabPageクラスのコレクションを管理していました。
ここではTabPageクラスを継承したMyTabBrowserPageクラスという自作クラスを用いています。



MyTabBrowserPageクラスにはTabPageクラスの機能に下記の機能を追加しています。

【Publicプロパティ】
Webブラウザ(取得専用)
WebBrowser WebBrowser
▲據璽犬URL(取得専用)
string TabPageURL

【Privateメソッド】
.織屬北松里魍いているWebページ名を設置
bool SetTabTitle()

【イベント】
.據璽URL変更イベント
PageURLChange

【イベントハンドラ】
.屮薀Ε兇離據璽犬瞭匹濆み開始イベント
WebBrowther_Navigated
▲屮薀Ε兇離據璽呼匹濆み完了後イベント
WebBrowther_DocumentTitleChanged
Webページ読み込み完了イベント
WebBrowther_DocumentCompleted



MyTabBrowserPageクラスの役割は、
タブページ内にブラウザを格納しておくことと、ブラウザの情報をタブに表示させることです。
また、タブページ内のWebブラウザのURLが切り替わったことを伝えるイベントも持っています。

タブページ内は見ての通り、ブラウザを格納しただけの構造になっています。
タブページが作成されると同時にWebブラウザをタブページ内に格納します。
また、タブページが削除されたと同時にWebページも削除されます。(ガベージコレクションがあるため明示的に削除処理は書いていませんが)

        //==コンストラクタ==
        public MyTabBrowserPage()
        {
            try
            {
                //タブ作成時の名称はとりあえず「読み込み中」とする
                this.Text = "読み込み中";
                //----------------------------
                //Webブラウザ
                prWebBrowser = new WebBrowser();
                //Webブラウザをタブページ一杯に表示
                prWebBrowser.Dock = DockStyle.Fill;
                //タブページにWebブラウザを設置
                this.Controls.Add(prWebBrowser);
                //----------------------------
                //読み込み開始イベント
                prWebBrowser.Navigated += new WebBrowserNavigatedEventHandler(WebBrowther_Navigated);
                //ブラウザのページ読み込み完了後イベント
                prWebBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowther_DocumentCompleted);
                //Webページのタイトル変更イベント
                prWebBrowser.DocumentTitleChanged += new EventHandler(WebBrowther_DocumentTitleChanged);
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }

下記のコードでは、Webブラウザで表示しているページのタイトルをタブに表示しています。
Webページのタイトルにはとんでもなく長いものもあるので、ここでは10文字以降は表示しないようにしています。

なお、Webページのタイトルをタブに設置するのは、
WebBrowserのDocumentTitleChanged(Webブラウザのタイトル変更)と
DocumentCompleted(Webページ読み込み完了)の2つのイベントで実行しています。
Navigatedイベントでは正常にWebページのタイトルを取得できないことがあります。

        //タブに名称を開いているWebページ名を設置
        private bool SetTabTitle()
        {
            bool wRet = true;
            try
            {
                //ページタイトルを取得
                string wTitle = prWebBrowser.Document.Title;
                //開いているページのタイトルをタブ名にする(最大10文字)
                if (wTitle.Length > 10)
                {
                    wTitle = wTitle.Substring(0, 10);
                }
                this.Text = wTitle;
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
                wRet = false;
            }
            return wRet;
        }
        //ブラウザのページ読み込み完了後イベント
        private void WebBrowther_DocumentTitleChanged(object sender, EventArgs e)
        {
            try
            {
                //タブにWebページ名を設定
                if (!SetTabTitle())
                {
                    //エラー
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }
        //Webページ読み込み完了イベント
        private void WebBrowther_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            try
            {
                //タブにWebページ名を設定
                if (!SetTabTitle())
                {
                    //エラー
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }

PageURLChangeイベントですが、
これはMyTabBrowserクラスにWebページのURLが変更されたことを伝えるためのイベントです。
ちなみにMyTabBrowserクラスのActivePageURLChangeイベントは、このイベントをトリガーとして発生させています。

    //==デリゲート定義==
    public delegate void PageURLChangeEvent(object sender, EventArgs e);
        //==イベント定義==
        //ページURL変更イベント
        public event PageURLChangeEvent PageURLChange;
        //ブラウザのページの読み込み開始イベント
        private void WebBrowther_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            try
            {
                //ページURL変更イベントを発生
                PageURLChange(this, new EventArgs());
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }




【ソースコード】
//MyTabBrowserPage.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace SimpleTabBrowser
{
    //==デリゲート定義==
    public delegate void PageURLChangeEvent(object sender, EventArgs e);
    //-----------------------------------------
    //==クラス定義==
    //タブブラウザページクラス
    //-----------------------------------------
    class MyTabBrowserPage:TabPage
    {
        //==Private変数定義==
        //Webブラウザ
        private WebBrowser prWebBrowser;
        //-----------------------------------------
        //==プロパティ定義==
        //Webブラウザ
        public WebBrowser WebBrowser
        {
            get
            {
                return prWebBrowser;
            }
        }
        //ページのURL(取得専用)
        public string TabPageURL
        {
            get
            {
                string wUrl;
                try
                {
                    wUrl = prWebBrowser.Url.ToString();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("例外エラー:" + ex.Message);
                    wUrl = "";
                }
                return wUrl;
            }
        }
        //-----------------------------------------
        //==イベント定義==
        //ページURL変更イベント
        public event PageURLChangeEvent PageURLChange;
        //-----------------------------------------
        //==コンストラクタ==
        public MyTabBrowserPage()
        {
            try
            {
                //タブ作成時の名称はとりあえず「読み込み中」とする
                this.Text = "読み込み中";
                //----------------------------
                //Webブラウザ
                prWebBrowser = new WebBrowser();
                //Webブラウザをタブページ一杯に表示
                prWebBrowser.Dock = DockStyle.Fill;
                //タブページにWebブラウザを設置
                this.Controls.Add(prWebBrowser);
                //----------------------------
                //読み込み開始イベント
                prWebBrowser.Navigated += new WebBrowserNavigatedEventHandler(WebBrowther_Navigated);
                //ブラウザのページ読み込み完了後イベント
                prWebBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowther_DocumentCompleted);
                //Webページのタイトル変更イベント
                prWebBrowser.DocumentTitleChanged += new EventHandler(WebBrowther_DocumentTitleChanged);
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }
        //-----------------------------------------
        //==Privateメソッド定義==
        //タブに名称を開いているWebページ名を設置
        private bool SetTabTitle()
        {
            bool wRet = true;
            try
            {
                //ページタイトルを取得
                string wTitle = prWebBrowser.Document.Title;
                //開いているページのタイトルをタブ名にする(最大10文字)
                if (wTitle.Length > 10)
                {
                    wTitle = wTitle.Substring(0, 10);
                }
                this.Text = wTitle;
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
                wRet = false;
            }
            return wRet;
        }
        //-----------------------------------------
        //==イベント定義==
        //ブラウザのページの読み込み開始イベント
        private void WebBrowther_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            try
            {
                //ページURL変更イベントを発生
                PageURLChange(this, new EventArgs());
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }
        //ブラウザのページ読み込み完了後イベント
        private void WebBrowther_DocumentTitleChanged(object sender, EventArgs e)
        {
            try
            {
                //タブにWebページ名を設定
                if (!SetTabTitle())
                {
                    //エラー
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }
        //Webページ読み込み完了イベント
        private void WebBrowther_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            try
            {
                //タブにWebページ名を設定
                if (!SetTabTitle())
                {
                    //エラー
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }

    }
}

コメント
コメントする








    
この記事のトラックバックURL
トラックバック