C#.NETメモ:タブブラウザの作成(.織峇浜クラス)

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

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



まず、メイン部分になるタブブラウザ部分です。



ここではTabControlクラスを継承したMyTabBrowserクラスという自作クラスを用いています。



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

【Publicプロパティ】
.▲ティブページ(取得専用)
MyTabBrowserPage ActiveTabPage

【Publicメソッド】
/卦タブページ追加
bool AddNewTabPage()
▲織屮據璽減鐔
bool DeleteTabPage()

【イベント】
.▲ティブページURL変更イベント
ActivePageURLChange

【イベントハンドラ】
.織屮リックイベント
Tab_Click()
▲織URL変更イベント
TabPage_PageURLChange
1Εリックメニュー「このタブを更新」クリックイベント
MenuTabUpdate_Click()
けΕリックメニュー「このタブを閉じる」クリックイベント
MenuTabDelete_Click()



MyTabBrowserクラスは、タブの追加・削除を行うクラスになります。
このクラス内ブラウザの操作は行いません。タブの操作を中心としています。
ブラウザの操作は後で説明するMyBrowserControlsクラスを用いています。

AddNewTabPageメソッドではTabPageクラスを継承したMyTabBrowserPageクラスのオブジェクトを作成し、
MyTabBrowserクラスのオブジェクトのTabPagesコレクション格納しています。

        //新規タブページ追加
        public bool AddNewTabPage()
        {
            bool wRet = true;
            try
            {
                //タブページを作成
                MyTabBrowserPage wTabPage = new MyTabBrowserPage();
                //タブテーブルにページを追加
                this.TabPages.Add(wTabPage);
                //新規タブをアクティブにする
                this.SelectedTab = wTabPage;
                //----------------------------------------
                //==イベント定義==
                //ページURL変更イベント
                wTabPage.PageURLChange += new PageURLChangeEvent(TabPage_PageURLChange);
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
                wRet = false;
            }
            return wRet;
        }

DeleteTabPageメソッドではタブの削除を行います。
ここでは単にTabPagesコレクション格納されているタブを削除しているだけです。

        //タブページを削除
        public bool DeleteTabPage()
        {
            bool wRet = true;
            try
            {
                //アクティブタブのインデックスを取得
                int wTabNo = this.TabPages.IndexOf(this.SelectedTab);
                //アクティブタブを削除
                this.TabPages.Remove(this.SelectedTab);
                //タブが1つ以上ある場合
                if (wTabNo > 0)
                {
                    //タブ削除後、1つ前のタブを選択
                    this.SelectedTab = this.TabPages[wTabNo - 1];
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
                wRet = false;
            }
            return wRet;
        }

プロパティにActiveTabPageとありますが、これは表示中のタブにあたります。
このタブの中に配置されているWebBrowserコントロールを操作していきます。

        //==プロパティ定義==
        //アクティブページ(取得専用)
        public MyTabBrowserPage ActiveTabPage
        {
            get
            {
                MyTabBrowserPage wTabPage;
                try
                {
                    wTabPage = (MyTabBrowserPage)this.TabPages[this.SelectedIndex];
                }
                catch (Exception ex)
                {
                    Console.WriteLine("例外エラー:" + ex.Message);
                    wTabPage = null;
                }
                return wTabPage;
            }
        }

ActivePageURLChangeイベントは表示されているタブ内のブラウザの表示URLを取得するために作成しました。
ブラウザのページが遷移したり、タブが切り替わったりした場合等、
コントロールのアドレスバーに表示させるべきURLが変わるタイミングを取得するためのイベントになります。

    //==デリゲート定義==
    public delegate void ActivePageURLChangeEvent(object sender, EventArgs e);
        //アクティブページURL変更イベント
        public event ActivePageURLChangeEvent ActivePageURLChange;
        //タブURL変更イベント
        private void TabPage_PageURLChange(object sender, EventArgs e)
        {
            try
            {
                //アクティブページURLイベントを発生
                ActivePageURLChange(this, new EventArgs());
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }




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

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

namespace SimpleTabBrowser
{
    //==デリゲート定義==
    public delegate void ActivePageURLChangeEvent(object sender, EventArgs e);
    //-----------------------------------------
    //==クラス定義==
    //タブブラウザクラス
    //-----------------------------------------
    class MyTabBrowser:TabControl
    {        
        //==プロパティ定義==
        //アクティブページ(取得専用)
        public MyTabBrowserPage ActiveTabPage
        {
            get
            {
                MyTabBrowserPage wTabPage;
                try
                {
                    wTabPage = (MyTabBrowserPage)this.TabPages[this.SelectedIndex];
                }
                catch (Exception ex)
                {
                    Console.WriteLine("例外エラー:" + ex.Message);
                    wTabPage = null;
                }
                return wTabPage;
            }
        }
        //-----------------------------------------
        //==イベント定義==
        //アクティブページURL変更イベント
        public event ActivePageURLChangeEvent ActivePageURLChange;
        //-----------------------------------------
        //==コンストラクタ==
        public MyTabBrowser()
        {
            try
            {
                //==起動時にタブを1つ開く==
                this.AddNewTabPage();
                this.ActiveTabPage.GoHome();
                //-----------------------------------------
                //==右クリックメニュー==
                ContextMenuStrip wMenu = new ContextMenuStrip();
                ToolStripItem wItem;
                //メニュー項目「このタブを更新する」を作成
                wItem = wMenu.Items.Add("このタブを更新する");
                wItem.Click += new EventHandler(MenuTabUpdate_Click);
                //メニュー項目「このタブを閉じる」を作成
                wItem = wMenu.Items.Add("このタブを閉じる");
                wItem.Click += new EventHandler(MenuTabDelete_Click);
                //-----------
                //右クリックメニューにメニューを設置
                this.ContextMenuStrip = wMenu;
                //-------------------------------
                //タブクリックイベント
                this.MouseClick += new MouseEventHandler(Tab_Click);
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }
        //-----------------------------------------
        //==Publicメソッド定義==
        //新規タブページ追加
        public bool AddNewTabPage()
        {
            bool wRet = true;
            try
            {
                //タブページを作成
                MyTabBrowserPage wTabPage = new MyTabBrowserPage();
                //タブテーブルにページを追加
                this.TabPages.Add(wTabPage);
                //新規タブをアクティブにする
                this.SelectedTab = wTabPage;
                //----------------------------------------
                //==イベント定義==
                //ページURL変更イベント
                wTabPage.PageURLChange += new PageURLChangeEvent(TabPage_PageURLChange);
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
                wRet = false;
            }
            return wRet;
        }
        //タブページを削除
        public bool DeleteTabPage()
        {
            bool wRet = true;
            try
            {
                //アクティブタブのインデックスを取得
                int wTabNo = this.TabPages.IndexOf(this.SelectedTab);
                //アクティブタブを削除
                this.TabPages.Remove(this.SelectedTab);
                //タブが1つ以上ある場合
                if (wTabNo > 0)
                {
                    //タブ削除後、1つ前のタブを選択
                    this.SelectedTab = this.TabPages[wTabNo - 1];
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
                wRet = false;
            }
            return wRet;
        }
        //-----------------------------------------
        //==イベント定義==
        //メニュー「このタブを更新」クリックイベント
        private void MenuTabUpdate_Click(object sender, EventArgs e)
        {
            try
            {
                //ページ更新
                if (!this.ActiveTabPage.UpdatePage())
                {
                    //エラー
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }
        //メニュー「このタブを閉じる」クリックイベント
        private void MenuTabDelete_Click(object sender, EventArgs e)
        {
            try
            {
                //タブ削除
                if (!DeleteTabPage())
                {
                    //エラー
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }
        //タブクリックイベント
        private void Tab_Click(object sender, MouseEventArgs e)
        {
            try
            {
                //中クリックの場合
                if(e.Button == MouseButtons.Middle)
                {
                    //タブ削除
                    if (!DeleteTabPage())
                    {
                        //エラー
                    }
                }
                //---------------------------------------
                //アクティブページURLイベントを発生
                ActivePageURLChange(this, new EventArgs());
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }
        //タブURL変更イベント
        private void TabPage_PageURLChange(object sender, EventArgs e)
        {
            try
            {
                //アクティブページURLイベントを発生
                ActivePageURLChange(this, new EventArgs());
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }
    }
}

コメント
コメントする








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