HeyCHのブログ

慢性疲労のへいちゃんです

【C#】簡単なブラウザを作ってみよう

WebBrowser

C#にはWebBrowserコントロールというものがあり、これを使うことで簡単なブラウザを作ることができます。

  • 新しいプロジェクトの作成から、Windows フォームアプリケーション(.NET Framework)を選択します。
    f:id:HeyCH:20200403234436p:plain
    Windowsフォームアプリケーション(.NET Framework)
  • 作成
    f:id:HeyCH:20200403234541p:plain
    作成
  • Buttonを2つ左上に配置し、その横にTextBoxを配置します。
    f:id:HeyCH:20200403234934p:plain
    ButtonとTextBox
  • TextBoxのAnchorプロパティをLeft,Top,Rightにします。
    f:id:HeyCH:20200403235316p:plain
    TextBoxのAnchor
  • 下全体にWebBrowserを配置します。
    f:id:HeyCH:20200403235449p:plain
    WebBrowserを配置
  • WebBrowserのAnchorプロパティをLeft,Top,Right,Bottomに設定します。
    f:id:HeyCH:20200403235652p:plain
    WebBrowserのAnchorプロパティ

TextBoxのイベント

  • Visual Studioでは、各コントロールのイベントをプロパティウィンドウの⚡マークを選択する事で表示することができます。
    f:id:HeyCH:20200404000318p:plain
    イベント
  • 今回はTextBoxのキーイベント「KeyPress」を使いたいので「KeyPress」の右の空欄をダブルクリックします。
    f:id:HeyCH:20200404000612p:plain
    KeyPress

f:id:HeyCH:20200404000703p:plain
textBox1_KeyPress

  • Enterキーが押された時にWebBrowserがTextBoxのURLをブラウズするようにコードを書きます。
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e) {
            if (e.KeyChar == (char)Keys.Enter) {
                webBrowser1.Navigate(textBox1.Text);
            }
        }

戻ると進むの実装

「<<」と「>>」のボタンをダブルクリックすると、各ボタンを押した時のイベントが追加されます。

        private void button1_Click(object sender, EventArgs e) {

        }

        private void button2_Click(object sender, EventArgs e) {

        }

ここに戻ると進むを押した時の処理を書いていきます。

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e) {
            if (e.KeyChar == (char)Keys.Enter) {
                try {
                    webBrowser1.Navigate(textBox1.Text);
                } catch (Exception ex) {
                    MessageBox.Show(ex.Message, ex.GetType().ToString());
                }
            }
        }
        private void button1_Click(object sender, EventArgs e) {
            if(webBrowser1.CanGoBack) webBrowser1.GoBack();
        }

        private void button2_Click(object sender, EventArgs e) {
            if (webBrowser1.CanGoForward) webBrowser1.GoForward();
        }

リンクをクリックしたときにTextBoxの文字が変わるようにしたい

Navigate完了のイベントを拾って、その時のWebBrowserのURLをテキストボックスに表示してやれば実現できそうです。

  • Navigatedイベントの追加
    f:id:HeyCH:20200404004347p:plain
    webBrowser1_Navigated
  • WebBrowserのURLをTextBoxに表示
        private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e) {
            textBox1.Text = webBrowser1.Url.ToString();
        }

今回のコード

(本当はListを使ってGoBack、GoForwardを実装するつもりだったんですけど、WebBrowserに機能がありました。てへっ)

        public Form1() {
            InitializeComponent();
        }

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e) {
            if (e.KeyChar == (char)Keys.Enter) {
                try {
                    webBrowser1.Navigate(textBox1.Text);
                } catch (Exception ex) {
                    MessageBox.Show(ex.Message, ex.GetType().ToString());
                }
            }
        }
        private void button1_Click(object sender, EventArgs e) {
            if(webBrowser1.CanGoBack) webBrowser1.GoBack();
        }

        private void button2_Click(object sender, EventArgs e) {
            if (webBrowser1.CanGoForward) webBrowser1.GoForward();
        }

        private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e) {
            textBox1.Text = webBrowser1.Url.ToString();
        }