C#.NETメモ:タブブラウザの作成(ブラウザコントロールクラス)

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

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





MyBrowserControlsクラスをFlowLayoutPanelクラスを継承した自作クラスです。
FlowLayoutPanelクラスを継承していますが、特にこのクラスである必要はありません。
ただのPanelクラスでも構いませんが、FlowLayoutPanelクラスは自動でコントロール並びを折り返してくれるので便利かと思います。



MyBrowserControlsクラスにはブラウザを操作するためのボタン等が設置されています。

【イベントハンドラ】
〔瓩襯椒織鵐リックイベント
BackPageBtn_Click
⊃覆爛椒織鵐リックイベント
ForwardPageBtn_Click
9洪轡椒織鵐リックイベント
UpdatePageBtn_Click
っ羯潺椒織鵐リックイベント
CancelPageBtn_Click
ゥ曄璽爛椒織鵐リックイベント
HomePageBtn_Click
Ε▲疋譽好弌爾任離ー押下イベント
AdressBarTxtBox_KeyDown
Сくボタンクリックイベント
AdressBarBtn_Click
┘▲ティブページURLイベント
TabBrowther_ActivePageURLChange



MyBrowserControlsクラスは、MyTabBrowserクラスのWebBrowserに対して操作を行うためのクラスです。
下記のコードでは、引数でMyTabBrowserクラスオブジェクトを受け取り、
ブラウザを操作するための、いろいろなコントロールを作成しています。
コントロールは単なるButtonクラスやTextBoxクラスです。

       //==コンストラクタ==
        public MyBrowserControls(MyTabBrowser rTabBrowther)
        {
            try
            {
                //タブブラウザオブジェクトをPrivate変数に格納
                prTabBrowther = rTabBrowther;
                prTabBrowther.ActivePageURLChange += new ActivePageURLChangeEvent(TabBrowther_ActivePageURLChange);
                //-------------------------------------
                //==ボタン設定==
                //戻るボタン
                prBackPageButton.Text = "戻る";
                prBackPageButton.AutoSize = true;
                prBackPageButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
                prBackPageButton.Click += new EventHandler(BackPageBtn_Click);
                this.Controls.Add(prBackPageButton);
                //----------------------
                //進むボタン
                prForwardPageButton.Text = "進む";
                prForwardPageButton.AutoSize = true;
                prForwardPageButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
                prForwardPageButton.Click += new EventHandler(ForwardPageBtn_Click);
                this.Controls.Add(prForwardPageButton);
                //----------------------
                //更新ボタン
                prUpdatePageButton.Text = "更新";
                prUpdatePageButton.AutoSize = true;
                prUpdatePageButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
                prUpdatePageButton.Click += new EventHandler(UpdatePageBtn_Click);
                this.Controls.Add(prUpdatePageButton);
                //----------------------
                //中止ボタン
                prCancelPageButton.Text = "中止";
                prCancelPageButton.AutoSize = true;
                prCancelPageButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
                prCancelPageButton.Click += new EventHandler(CancelPageBtn_Click);
                this.Controls.Add(prCancelPageButton);
                //----------------------
                //ホームボタン
                prHomePageButton.Text = "ホーム";
                prHomePageButton.AutoSize = true;
                prHomePageButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
                prHomePageButton.Click += new EventHandler(HomePageBtn_Click);
                this.Controls.Add(prHomePageButton);
                //----------------------
                //アドレスバー
                prAdressBarTxtBox.Width = 300;
                prAdressBarTxtBox.KeyDown += new KeyEventHandler(AdressBarTxtBox_KeyDown);
                this.Controls.Add(prAdressBarTxtBox);
                //アドレスボタン
                prAdressBarButton.Text = "開く";
                prAdressBarButton.AutoSize = true;
                prAdressBarButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
                prAdressBarButton.Click += new EventHandler(AdressBarBtn_Click);
                this.Controls.Add(prAdressBarButton);
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }

各ボタンのクリックイベントから、MyTabBrowserクラスオブジェクトのブラウザを操作します。
MyTabBrowserクラスオブジェクトにはMyTabBrowserPageクラスのActiveTabPageがあり、
ActiveTabPageにはWebBrowtherが取得できるようになっています。
下記のコードでは、アクティブタブページのWebBrowtherから直接ブラウザを操作しています。

        //1つ前のページに戻る
        private void BackPageBtn_Click(object sender, EventArgs e)
        {
            try
            {
                //タブブラウザからタブページを取得し、ブラウザの戻るを実行
                prTabBrowther.ActiveTabPage.WebBrowser.GoBack();
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }

ただし、アドレスバーに表示するURLを表示する方法だけはちょっと違っています。
MyTabBrowserクラスのActivePageURLChangeイベント(自作イベント)が発生した場合に、アクティブタブのブラウザからURLを取得するようにしています。

ここではタブブラウザ側のイベントから取得するようにしましたが、
逆にタブブラウザ側からアドレスバーに値を設定しても良いかと思います。まぁ個人の好みかとは思いますが。

        //アクティブページURLイベント
        private void TabBrowther_ActivePageURLChange(object sender, EventArgs e)
        {
            try
            {
                //アクティブページのURLをアドレスバーに表示する
                if (prTabBrowther.ActiveTabPage != null)
                {
                    prAdressBarTxtBox.Text = prTabBrowther.ActiveTabPage.TabPageURL;
                }
                else
                {
                    //タブが存在しない場合は空欄にする
                    prAdressBarTxtBox.Text = "";
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }




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

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

namespace SimpleTabBrowser
{
    //==クラス定義==
    //ブラウザコントロールクラス
    class MyBrowserControls:FlowLayoutPanel
    {
        //==Private変数==
        //タブブラウザ
        private MyTabBrowser prTabBrowther;
        //戻るボタン
        private Button prBackPageButton = new Button();
        //進むボタン
        private Button prForwardPageButton = new Button();
        //更新ボタン
        private Button prUpdatePageButton = new Button();
        //中止ボタン
        private Button prCancelPageButton = new Button();
        //ホームボタン
        private Button prHomePageButton = new Button();
        //アドレスバー
        private TextBox prAdressBarTxtBox = new TextBox();
        //アドレスバーボタン
        private Button prAdressBarButton = new Button();
        //-----------------------------------------
        //==コンストラクタ==
        public MyBrowserControls(MyTabBrowser rTabBrowther)
        {
            try
            {
                //タブブラウザオブジェクトをPrivate変数に格納
                prTabBrowther = rTabBrowther;
                prTabBrowther.ActivePageURLChange += new ActivePageURLChangeEvent(TabBrowther_ActivePageURLChange);
                //-------------------------------------
                //==ボタン設定==
                //戻るボタン
                prBackPageButton.Text = "戻る";
                prBackPageButton.AutoSize = true;
                prBackPageButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
                prBackPageButton.Click += new EventHandler(BackPageBtn_Click);
                this.Controls.Add(prBackPageButton);
                //----------------------
                //進むボタン
                prForwardPageButton.Text = "進む";
                prForwardPageButton.AutoSize = true;
                prForwardPageButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
                prForwardPageButton.Click += new EventHandler(ForwardPageBtn_Click);
                this.Controls.Add(prForwardPageButton);
                //----------------------
                //更新ボタン
                prUpdatePageButton.Text = "更新";
                prUpdatePageButton.AutoSize = true;
                prUpdatePageButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
                prUpdatePageButton.Click += new EventHandler(UpdatePageBtn_Click);
                this.Controls.Add(prUpdatePageButton);
                //----------------------
                //中止ボタン
                prCancelPageButton.Text = "中止";
                prCancelPageButton.AutoSize = true;
                prCancelPageButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
                prCancelPageButton.Click += new EventHandler(CancelPageBtn_Click);
                this.Controls.Add(prCancelPageButton);
                //----------------------
                //ホームボタン
                prHomePageButton.Text = "ホーム";
                prHomePageButton.AutoSize = true;
                prHomePageButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
                prHomePageButton.Click += new EventHandler(HomePageBtn_Click);
                this.Controls.Add(prHomePageButton);
                //----------------------
                //アドレスバー
                prAdressBarTxtBox.Width = 300;
                prAdressBarTxtBox.KeyDown += new KeyEventHandler(AdressBarTxtBox_KeyDown);
                this.Controls.Add(prAdressBarTxtBox);
                //アドレスボタン
                prAdressBarButton.Text = "開く";
                prAdressBarButton.AutoSize = true;
                prAdressBarButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
                prAdressBarButton.Click += new EventHandler(AdressBarBtn_Click);
                this.Controls.Add(prAdressBarButton);
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }
        //-----------------------------------------
        //==イベント定義==
        //1つ前のページに戻る
        private void BackPageBtn_Click(object sender, EventArgs e)
        {
            try
            {
                //タブブラウザからタブページを取得し、ブラウザの戻るを実行
                prTabBrowther.ActiveTabPage.WebBrowser.GoBack();
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }
        //1つ次のページに進む
        private void ForwardPageBtn_Click(object sender, EventArgs e)
        {
            try
            {
                //タブブラウザからタブページを取得し、ブラウザの進むを実行
                prTabBrowther.ActiveTabPage.WebBrowser.GoForward();
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }
        //ページを更新する
        private void UpdatePageBtn_Click(object sender, EventArgs e)
        {
            try
            {
                //タブブラウザからタブページを取得し、ブラウザのページを更新する
                prTabBrowther.ActiveTabPage.WebBrowser.Refresh();
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }
        //ページ読み込みを中止する
        private void CancelPageBtn_Click(object sender, EventArgs e)
        {
            try
            {
                //タブブラウザからタブページを取得し、ブラウザのページ読み込みを中止する
                prTabBrowther.ActiveTabPage.WebBrowser.Stop();
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }
        //IEでホームに設定されているページに進む
        private void HomePageBtn_Click(object sender, EventArgs e)
        {
            try
            {
                //タブが開いていない場合は、新規タブを開く
                if (prTabBrowther.TabCount <= 0)
                {
                    prTabBrowther.AddNewTabPage();
                }
                //タブブラウザからタブページを取得し、ブラウザのホームを実行
                prTabBrowther.ActiveTabPage.WebBrowser.GoHome();
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }
        //アドレスバーでのキー押下イベント
        private void AdressBarTxtBox_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                //Enterキーが押された場合
                if (e.KeyCode == Keys.Enter)
                {
                    //新規タブを開く
                    prTabBrowther.AddNewTabPage();
                    //指定のURLのページを開く
                    prTabBrowther.ActiveTabPage.WebBrowser.Navigate(prAdressBarTxtBox.Text);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }
        //アドレスバーからURLを開く
        private void AdressBarBtn_Click(object sender, EventArgs e)
        {
            try
            {
                //新規タブを開く
                prTabBrowther.AddNewTabPage();
                //指定のURLのページを開く
                prTabBrowther.ActiveTabPage.WebBrowser.Navigate(prAdressBarTxtBox.Text);
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }
        //アクティブページURLイベント
        private void TabBrowther_ActivePageURLChange(object sender, EventArgs e)
        {
            try
            {
                //アクティブページのURLをアドレスバーに表示する
                if (prTabBrowther.ActiveTabPage != null)
                {
                    prAdressBarTxtBox.Text = prTabBrowther.ActiveTabPage.TabPageURL;
                }
                else
                {
                    //タブが存在しない場合は空欄にする
                    prAdressBarTxtBox.Text = "";
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("例外エラー:" + ex.Message);
            }
        }
    }
}

コメント
コメントする








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