C#で簡単なWebブラウザを作る
(その2)
[移動]ボタンを押したときに、URLテキストボックスで指定されたURLのページを表示します。
サンプルコードを以下に示します。
/****************************************************************************/
/*!
* @brief 指定されたURLのページを表示する.
*
* @param [in] sender イベントの送信元のオブジェクト.
* @param [in] e イベント情報.
*
* @retval なし.
*/
private void MoveButton_Click(object sender, EventArgs e)
{
//! 指定されたURLが空白の場合、処理しない.
if( UrlList.Text == null || UrlList.Text.Length == 0 ){
return;
}
//! 指定されたURLのWebページを読み込む.
try {
webBrowser1.Navigate( new Uri(UrlList.Text) );
}
catch( System.UriFormatException ){
return;
}
}
指定されたURLのページをWebBrowserクラスのNavigate()メソッドを使用して表示します。
public void Navigate( Uri url )
引数 | 説明 |
---|---|
Uri | 表示するページのURL。 |
WebBrowserクラスのプロパティUrlに表示するページのURLをセットしてもNavigate()メソッドと同様の動作を行います。
public Uri Url { get; set; }
WebBrowserコントロールに表示するページが変更される場合、変更の開始と終了でそれぞれイベントが通知されます。
サンプルコードでは、ページ変更の終了イベントで、ナビゲーション履歴を調べて[戻る]/[進む]ボタンの有効/無効を設定しています。
また、表示するWebページのタイトルを取得して、ウインドウのキャプションを変更しています。
サンプルコードを以下に示します。
/****************************************************************************/
/*!
* @brief Webページの読込みを開始したときのイベント処理.
*
* @param [in] sender イベントの送信元のオブジェクト.
* @param [in] e イベント情報.
*
* @retval なし.
*/
private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
//! ナビゲーションボタンを無効にする.
SetNaviButton( false );
}
/****************************************************************************/
/*!
* @brief Webページの読込みを開始したときのイベント処理.
*
* @param [in] sender イベントの送信元のオブジェクト.
* @param [in] e イベント情報.
*
* @retval なし.
*/
private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
//! ナビゲーションボタンを有効にする.
SetNaviButton( true );
//! 表示したWebページのURLを表示する.
UrlList.Text = webBrowser1.Url.ToString();
/*!
* URLリストに表示したWebページのURLを追加する.
* (但し、既にURLリストに追加されているURLの場合は登録しない)
*/
int i;
for( i = 0; i < UrlList.Items.Count; i++ ){
if( UrlList.Items[i].ToString() == webBrowser1.Url.ToString() ){
break;
}
}
if( i >= UrlList.Items.Count ){
UrlList.Items.Add( webBrowser1.Url.ToString() );
}
//! Webページのタイトルをウインドウのキャプションに表示する.
if( webBrowser1.DocumentTitle == null || webBrowser1.DocumentTitle.Length == 0 ){
this.Text = webBrowser1.Url.AbsoluteUri;
}else{
this.Text = webBrowser1.DocumentTitle;
}
}
/****************************************************************************/
/*!
* @brief ナビゲーション・ボタンの有効/無効を設定する.
*
* @param [in] ena True = ナビボタンを有効 / False = ナビボタンを無効.
*
* @retval なし.
*/
private void SetNaviButton( bool ena )
{
if( ena == true ){
//! ナビゲーション履歴に前のページがある場合に、[戻る]ボタンを有効にする.
if( webBrowser1.CanGoBack == true ){
BackButton.Enabled = true;
}else{
BackButton.Enabled = false;
}
//! ナビゲーション履歴に次のページがある場合に、[進む]ボタンを有効にする.
if( webBrowser1.CanGoForward == true ){
FwdButton.Enabled = true;
}else{
FwdButton.Enabled = false;
}
//! [更新]/[Home]/[移動]ボタンを許可する.
RefreshButton.Enabled = true;
HomeButton.Enabled = true;
MoveButton.Enabled = true;
//! [中止]ボタンを禁止にする.
StopButton.Enabled = false;
}else{
//! [中止]ボタン以外を禁止にする.
BackButton.Enabled = false;
FwdButton.Enabled = false;
RefreshButton.Enabled = false;
HomeButton.Enabled = false;
MoveButton.Enabled = false;
StopButton.Enabled = true;
}
}
指定されたURLのページをWebBrowserクラスのNavigate()メソッドを使用して表示します。
public event WebBrowserNavigatedEventHandler Navigated
ページの読込みが終了するとWebBrowserクラスのNavigating()イベントが通知されます。
public event WebBrowserNavigatingEventHandler Navigating
WebBrowserコントロールに表示されているWebページのタイトルを取得します。
public string DocumentTitle { get; }
WebBrowserコントロールのナビゲーション履歴に前のページがあるかどうかを調べます。
public bool CanGoBack { get; }
WebBrowserコントロールのナビゲーション履歴に次のページがあるかどうかを調べます。
public bool CanGoForward { get; }