世紀末の墓

世紀末の墓

IT系寄りの雑記

webブラウザを自作したい!(2)

URLボックスの実装

見た目
f:id:silmin:20170803212614p:plain:w250f:id:silmin:20170803212617p:plain:w250

↑こんな風にしっかり変わります。

ちゃんと入力してEnterキーで飛ぶこともできるよ!
これがめちゃめちゃ時間かかったんだよなぁ(なんで)

あとちゃっかりタイトルもサイトによって変わるようにいじってます。

ソースコード

using System;
using System.Drawing;
using System.Windows.Forms;

//mainは割愛

class Browser : Form
{
    WebBrowser browser;
    TextBox urlBox;

    public Browser()
    {
        //item
        browser = new WebBrowser()
        {
            Location = new Point( 0, 30 ),
            Size = new Size( 1200, 800 )
        };
        urlBox = new TextBox()
        {
            Location = new Point( 30, 2 ),
            Size = new Size( 1000, 20 ),
            Font = new Font( "meiryo", 10 )
        };
        this.Controls.Add( browser );
        this.Controls.Add( urlBox );

        //event handler
        this.Shown += new EventHandler( this.Browser_Load );
        this.SizeChanged += new EventHandler( this.ReSized );
    }
    
    private void Browser_Load( object sender, EventArgs e )
    {
        this.ClientSize = new Size( 1200, 830 );
        this.Text = "My Browser";

        //script error block
        browser.ScriptErrorsSuppressed = true;

        //event handler
        browser.Navigated += new WebBrowserNavigatedEventHandler( this.Browser_Navigated );
        urlBox.KeyDown += new KeyEventHandler( this.urlBox_KeyDown );

        //first page
        string url = "http://www.google.co.jp";
        browser.Navigate( url );
    }

    private void urlBox_KeyDown( object sender, KeyEventArgs e )
    {
        if( e.KeyCode == Keys.Enter )  
        {
            if( urlBox.Text != string.Empty )
            {
                browser.Navigate( urlBox.Text );
            }
        }
    }

    private void Browser_Navigated( object sender, WebBrowserNavigatedEventArgs e )
    {
        this.Text = browser.DocumentTitle;
        this.urlBox.Text = browser.Url.ToString();
    }

    private void ReSized( object sender, EventArgs e )
    {
        int width = this.ClientSize.Width;
        int height = this.ClientSize.Height;
        this.browser.Size = new Size( width, height - 30 );
    }
}

前回に比べてちょっと増えましたね(当たり前)

urlBox = new TextBox()                //URLいれるやつ
{
    Location = new Point( 30, 2 ),
    Size = new Size( 1000, 20 ),
    Font = new Font( "meiryo", 10 )
};

TextBoxは結局フォントの大きさでheightが決まるみたいなので適当に目分量で決めました。
ゆるしてくださいなんでもしません。(しません。)
フォントがメイリオなのに深い意味はありません。思いついたのがメイリオだっただけです。

private void Browser_Navigated( object sender, WebBrowserNavigatedEventArgs e )
{
    this.Text = browser.DocumentTitle;            //タイトルを変更
    this.urlBox.Text = browser.Url.ToString();    //URLボックスに今のページのURLを格納
}

WebBrowser.Navigatedイベントはページ移動したときに発生するイベントらしいです。(雑)
だったらそこでタイトルとURL更新すればいいじゃないということで更新。

private void urlBox_KeyDown( object sender, KeyEventArgs e )
{
    if( e.KeyCode == Keys.Enter )              //押されたキーがEnterキーだったら
    {
        if( urlBox.Text != string.Empty )      //URLボックスが空じゃなかったら
        {
            browser.Navigate( urlBox.Text );   //そのURL先に移動
        }
    }
}

TextBox(Control).KeyDownイベントはキーが押下されたときに発生するイベントらしいです。
それ利用して移動させちゃいます。

先程言った時間のかかったポイントは e,KeyCode の部分です。


は?
普通じゃん。



そう今思えば普通なんですね。

ですが僕は Ctrl, Shift, Alt のような修飾キーの押されたモノを持つ Control.ModifierKeys と一生懸命比較していたためできなかった。
雑魚確定ですねorz


ここまでで一応今回の目標(?)は達成なんですが、1つやることがあります。

//script error block
browser.ScriptErrorsSuppressed = true;

これです。
これはスクリプトエラーを表示しないというフラグです。
trueで表示しないとなります。(デフォルト:false)

これしないとスクリプトエラー出まくってまともにブラウジングできなかったのでしておきます。

次回は戻る・進む・再読込機能とお気に入り機能付けたいなぁ・・・・(時間をくれ)