[C#] WebBrowserコントロールの基本的な使い方
C#のWebBrowserコントロールは、Windows FormsアプリケーションでWebページを表示するためのコンポーネントです。
基本的な使い方としては、まずVisual StudioのツールボックスからWebBrowserコントロールをフォームにドラッグアンドドロップします。
次に、Navigateメソッド
を使用して特定のURLを開くことができます。
例えば、webBrowser1.Navigate("http://www.example.com");
のように記述します。
また、DocumentCompleted
イベントを利用して、ページの読み込みが完了したときの処理を追加することも可能です。
WebBrowserコントロールは、Internet Explorerのレンダリングエンジンを使用しているため、最新のWeb標準に対応していない場合があります。
WebBrowserコントロールの概要
WebBrowserコントロールとは
WebBrowserコントロールは、C#のWindowsフォームアプリケーションにおいて、Webページを表示するためのコンポーネントです。
これにより、ユーザーはアプリケーション内で直接Webコンテンツを閲覧することができます。
WebBrowserコントロールは、Internet Explorerのレンダリングエンジンを使用しており、HTML、CSS、JavaScriptをサポートしています。
WebBrowserコントロールの用途
WebBrowserコントロールは、さまざまな用途で利用されます。
以下はその主な用途です。
用途 | 説明 |
---|---|
Webページの表示 | 外部のWebサイトやローカルHTMLファイルを表示する。 |
データの取得 | Webページから情報を取得し、アプリケーション内で利用する。 |
ユーザーインターフェース | アプリケーションの一部としてWebコンテンツを統合する。 |
WebBrowserコントロールの制限事項
WebBrowserコントロールにはいくつかの制限があります。
以下にその主な制限を示します。
制限事項 | 説明 |
---|---|
最新のWeb標準への対応 | Internet Explorerのバージョンに依存しているため、最新のWeb標準に完全には対応していない。 |
セキュリティ制限 | 一部のWebサイトやスクリプトが正常に動作しない場合がある。 |
パフォーマンス | 大量のデータや複雑なWebページの表示において、パフォーマンスが低下することがある。 |
WebBrowserコントロールの基本設定
Visual Studioでのプロジェクト作成
- Visual Studioを起動し、「新しいプロジェクト」を選択します。
- 「Windows フォーム アプリケーション」を選び、プロジェクト名を入力します。
- 「作成」をクリックしてプロジェクトを作成します。
- フォームデザイナーが表示されるので、ここでWebBrowserコントロールを配置します。
WebBrowserコントロールの配置
- ツールボックスから
WebBrowser
コントロールを見つけます。 - フォームデザイナーにドラッグ&ドロップして配置します。
- 配置したWebBrowserコントロールのサイズや位置を調整します。
以下は、WebBrowserコントロールを配置するためのサンプルコードです。
partial class MyForm : Form
{
private WebBrowser webBrowser1;
public MyForm()
{
InitializeComponent(); // フォームの初期化
webBrowser1 = new WebBrowser(); // WebBrowserコントロールのインスタンスを作成
webBrowser1.Dock = DockStyle.Fill; // コントロールをフォーム全体に広げる
this.Controls.Add(webBrowser1); // フォームにWebBrowserコントロールを追加
}
}
このコードでは、WebBrowserコントロールをフォーム全体に広げる設定を行っています。
プロパティの設定
WebBrowserコントロールには、さまざまなプロパティがあります。
以下は、よく使用されるプロパティの一部です。
プロパティ名 | 説明 |
---|---|
Url | 表示するWebページのURLを指定する。 |
ScriptErrorsSuppressed | スクリプトエラーを非表示にするかどうかを設定する。 |
DocumentText | HTMLコンテンツを直接指定して表示する。 |
これらのプロパティを設定することで、WebBrowserコントロールの動作をカスタマイズできます。
例えば、URLを指定してWebページを表示するには、以下のようにします。
webBrowser1.Url = new Uri("https://www.example.com"); // 表示するURLを設定
このように、プロパティを活用することで、WebBrowserコントロールの機能を最大限に引き出すことができます。
Webページの表示
Navigateメソッドの使用
WebBrowserコントロールでWebページを表示するためには、Navigateメソッド
を使用します。
このメソッドは、指定したURLに移動し、Webページを読み込むための基本的な手段です。
以下は、Navigateメソッド
を使用したサンプルコードです。
partial class MyForm : Form
{
private WebBrowser webBrowser1;
public MyForm()
{
InitializeComponent(); // フォームの初期化
webBrowser1 = new WebBrowser(); // WebBrowserコントロールのインスタンスを作成
webBrowser1.Dock = DockStyle.Fill; // コントロールをフォーム全体に広げる
this.Controls.Add(webBrowser1); // フォームにWebBrowserコントロールを追加
webBrowser1.Navigate("https://www.example.com"); // Webページを表示
}
}
このコードでは、Navigateメソッド
を使用して指定したURLのWebページを表示しています。
URLの指定方法
Navigateメソッド
を使用する際、URLは文字列として指定します。
URLは、HTTPまたはHTTPSプロトコルを使用する必要があります。
以下は、異なる形式のURLを指定する例です。
webBrowser1.Navigate("https://www.example.com"); // HTTPSのURL
webBrowser1.Navigate("http://www.example.com"); // HTTPのURL
webBrowser1.Navigate("file:///C:/path/to/localfile.html"); // ローカルHTMLファイル
このように、WebBrowserコントロールはインターネット上のWebページだけでなく、ローカルのHTMLファイルも表示することができます。
ページ読み込みの確認
WebBrowserコントロールでは、ページの読み込みが完了したかどうかを確認するために、DocumentCompleted
イベントを使用します。
このイベントは、Webページの読み込みが完了したときに発生します。
以下は、ページ読み込みの確認を行うサンプルコードです。
partial class MyForm : Form
{
private WebBrowser webBrowser1;
public MyForm()
{
InitializeComponent(); // フォームの初期化
webBrowser1 = new WebBrowser(); // WebBrowserコントロールのインスタンスを作成
webBrowser1.Dock = DockStyle.Fill; // コントロールをフォーム全体に広げる
this.Controls.Add(webBrowser1); // フォームにWebBrowserコントロールを追加
webBrowser1.DocumentCompleted += WebBrowser1_DocumentCompleted; // イベントハンドラの追加
webBrowser1.Navigate("https://www.example.com"); // Webページを表示
}
private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
MessageBox.Show("ページの読み込みが完了しました!"); // 読み込み完了のメッセージ
}
}
このコードでは、DocumentCompleted
イベントを利用して、ページの読み込みが完了した際にメッセージボックスを表示しています。
これにより、ユーザーにページの読み込み状況を通知することができます。
イベントの活用
DocumentCompletedイベント
DocumentCompleted
イベントは、WebBrowserコントロールが指定したWebページの読み込みを完了したときに発生します。
このイベントを利用することで、ページが完全に表示された後に特定の処理を実行することができます。
以下は、DocumentCompleted
イベントを使用したサンプルコードです。
partial class MyForm : Form
{
private WebBrowser webBrowser1;
public MyForm()
{
InitializeComponent(); // フォームの初期化
webBrowser1 = new WebBrowser(); // WebBrowserコントロールのインスタンスを作成
webBrowser1.Dock = DockStyle.Fill; // コントロールをフォーム全体に広げる
this.Controls.Add(webBrowser1); // フォームにWebBrowserコントロールを追加
webBrowser1.DocumentCompleted += WebBrowser1_DocumentCompleted; // イベントハンドラの追加
webBrowser1.Navigate("https://www.example.com"); // Webページを表示
}
private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
MessageBox.Show("ページの読み込みが完了しました!"); // 読み込み完了のメッセージ
}
}
このコードでは、Webページの読み込みが完了した際にメッセージボックスを表示しています。
Navigatingイベント
Navigating
イベントは、WebBrowserコントロールが新しいページに移動しようとする際に発生します。
このイベントを利用することで、ページ遷移をキャンセルしたり、特定の条件に基づいて処理を行うことができます。
以下は、Navigating
イベントを使用したサンプルコードです。
partial class MyForm : Form
{
private WebBrowser webBrowser1;
public MyForm()
{
InitializeComponent(); // フォームの初期化
webBrowser1 = new WebBrowser(); // WebBrowserコントロールのインスタンスを作成
webBrowser1.Dock = DockStyle.Fill; // コントロールをフォーム全体に広げる
this.Controls.Add(webBrowser1); // フォームにWebBrowserコントロールを追加
webBrowser1.Navigating += WebBrowser1_Navigating; // イベントハンドラの追加
webBrowser1.Navigate("https://www.example.com"); // Webページを表示
}
private void WebBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
if (e.Url.ToString().Contains("example.com")) // 特定のURLをチェック
{
MessageBox.Show("このページに移動しようとしています: " + e.Url); // メッセージを表示
}
else
{
e.Cancel = true; // 他のURLへの遷移をキャンセル
}
}
}
このコードでは、特定のURLに移動しようとした際にメッセージを表示し、他のURLへの遷移をキャンセルしています。
Navigatedイベント
Navigated
イベントは、WebBrowserコントロールが新しいページに移動した後に発生します。
このイベントを利用することで、ページ遷移後の処理を行うことができます。
以下は、Navigated
イベントを使用したサンプルコードです。
partial class MyForm : Form
{
private WebBrowser webBrowser1;
public MyForm()
{
InitializeComponent(); // フォームの初期化
webBrowser1 = new WebBrowser(); // WebBrowserコントロールのインスタンスを作成
webBrowser1.Dock = DockStyle.Fill; // コントロールをフォーム全体に広げる
this.Controls.Add(webBrowser1); // フォームにWebBrowserコントロールを追加
webBrowser1.Navigated += WebBrowser1_Navigated; // イベントハンドラの追加
webBrowser1.Navigate("https://www.example.com"); // Webページを表示
}
private void WebBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
MessageBox.Show("新しいページに移動しました: " + e.Url); // 新しいページのURLを表示
}
}
このコードでは、新しいページに移動した際にそのURLをメッセージボックスで表示しています。
これにより、ユーザーに現在表示されているページを通知することができます。
Webページとのインタラクション
DOM操作の基本
WebBrowserコントロールを使用すると、表示されているWebページのDOM(Document Object Model)を操作することができます。
これにより、HTML要素の取得や変更が可能になります。
以下は、DOM操作の基本的なサンプルコードです。
partial class MyForm : Form
{
private WebBrowser webBrowser1;
public MyForm()
{
InitializeComponent(); // フォームの初期化
webBrowser1 = new WebBrowser(); // WebBrowserコントロールのインスタンスを作成
webBrowser1.Dock = DockStyle.Fill; // コントロールをフォーム全体に広げる
this.Controls.Add(webBrowser1); // フォームにWebBrowserコントロールを追加
webBrowser1.DocumentCompleted += WebBrowser1_DocumentCompleted; // イベントハンドラの追加
webBrowser1.Navigate("https://www.example.com"); // Webページを表示
}
private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
// ページ内の特定の要素を取得
HtmlElement element = webBrowser1.Document.GetElementById("elementId"); // IDで要素を取得
if (element != null)
{
element.InnerText = "新しいテキスト"; // 要素のテキストを変更
}
}
}

このコードでは、ページが読み込まれた後に特定のIDを持つ要素のテキストを変更しています。
JavaScriptの実行
WebBrowserコントロールでは、JavaScriptを実行することも可能です。
これにより、Webページ内のスクリプトを動的に実行できます。
以下は、JavaScriptを実行するサンプルコードです。
partial class MyForm : Form
{
private WebBrowser webBrowser1;
public MyForm()
{
InitializeComponent(); // フォームの初期化
webBrowser1 = new WebBrowser(); // WebBrowserコントロールのインスタンスを作成
webBrowser1.Dock = DockStyle.Fill; // コントロールをフォーム全体に広げる
this.Controls.Add(webBrowser1); // フォームにWebBrowserコントロールを追加
webBrowser1.DocumentCompleted += WebBrowser1_DocumentCompleted; // イベントハンドラの追加
webBrowser1.Navigate("https://www.example.com"); // Webページを表示
}
private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
// JavaScriptを実行
webBrowser1.Document.InvokeScript("alert", new object[] { "JavaScriptが実行されました!" }); // アラートを表示
}
}

このコードでは、ページが読み込まれた後にJavaScriptのalert関数
を呼び出して、アラートメッセージを表示しています。
フォームデータの送信
WebBrowserコントロールを使用して、フォームデータを送信することもできます。
これにより、Webページ上のフォームに入力したデータを送信することが可能です。
以下は、フォームデータを送信するサンプルコードです。
partial class MyForm : Form
{
private WebBrowser webBrowser1;
public MyForm()
{
InitializeComponent(); // フォームの初期化
webBrowser1 = new WebBrowser(); // WebBrowserコントロールのインスタンスを作成
webBrowser1.Dock = DockStyle.Fill; // コントロールをフォーム全体に広げる
this.Controls.Add(webBrowser1); // フォームにWebBrowserコントロールを追加
webBrowser1.DocumentCompleted += WebBrowser1_DocumentCompleted; // イベントハンドラの追加
webBrowser1.Navigate("https://www.example.com/form"); // フォームページを表示
}
private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
// フォーム要素を取得
HtmlElement inputElement = webBrowser1.Document.GetElementById("inputFieldId"); // 入力フィールドを取得
if (inputElement != null)
{
inputElement.SetAttribute("value", "送信するデータ"); // 入力フィールドにデータを設定
}
// フォームを送信
HtmlElement formElement = webBrowser1.Document.GetElementById("formId"); // フォームを取得
if (formElement != null)
{
formElement.InvokeMember("submit"); // フォームを送信
}
}
}
このコードでは、指定したIDを持つ入力フィールドにデータを設定し、その後フォームを送信しています。
これにより、Webページ上のフォームにデータを自動的に入力し、送信することができます。
応用例
ローカルHTMLファイルの表示
WebBrowserコントロールを使用して、ローカルに保存されたHTMLファイルを表示することができます。
これにより、アプリケーション内で静的なWebコンテンツを簡単に表示できます。
以下は、ローカルHTMLファイルを表示するサンプルコードです。
partial class MyForm : Form
{
private WebBrowser webBrowser1;
public MyForm()
{
InitializeComponent(); // フォームの初期化
webBrowser1 = new WebBrowser(); // WebBrowserコントロールのインスタンスを作成
webBrowser1.Dock = DockStyle.Fill; // コントロールをフォーム全体に広げる
this.Controls.Add(webBrowser1); // フォームにWebBrowserコントロールを追加
// ローカルHTMLファイルを表示
webBrowser1.Navigate("file:///C:/path/to/localfile.html"); // ローカルファイルのパスを指定
}
}
このコードでは、指定したパスのローカルHTMLファイルをWebBrowserコントロールで表示しています。
ファイルパスは適宜変更してください。
PDFや画像の表示
WebBrowserコントロールは、PDFファイルや画像ファイルも表示することができます。
これにより、アプリケーション内でさまざまなファイル形式を扱うことが可能です。
以下は、PDFファイルを表示するサンプルコードです。
partial class MyForm : Form
{
private WebBrowser webBrowser1;
public MyForm()
{
InitializeComponent(); // フォームの初期化
webBrowser1 = new WebBrowser(); // WebBrowserコントロールのインスタンスを作成
webBrowser1.Dock = DockStyle.Fill; // コントロールをフォーム全体に広げる
this.Controls.Add(webBrowser1); // フォームにWebBrowserコントロールを追加
// PDFファイルを表示
webBrowser1.Navigate("file:///C:/path/to/document.pdf"); // PDFファイルのパスを指定
}
}
このコードでは、指定したパスのPDFファイルをWebBrowserコントロールで表示しています。
画像ファイルも同様に表示できます。
Webページのスクリーンショット取得
WebBrowserコントロールを使用して、表示されているWebページのスクリーンショットを取得することも可能です。
以下は、スクリーンショットを取得するためのサンプルコードです。
partial class MyForm : Form
{
private WebBrowser webBrowser1;
public MyForm()
{
InitializeComponent(); // フォームの初期化
webBrowser1 = new WebBrowser(); // WebBrowserコントロールのインスタンスを作成
webBrowser1.Dock = DockStyle.Fill; // コントロールをフォーム全体に広げる
this.Controls.Add(webBrowser1); // フォームにWebBrowserコントロールを追加
webBrowser1.DocumentCompleted += WebBrowser1_DocumentCompleted; // イベントハンドラの追加
webBrowser1.Navigate("https://www.example.com"); // Webページを表示
}
private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
// スクリーンショットを取得
Bitmap bitmap = new Bitmap(webBrowser1.Width, webBrowser1.Height); // ビットマップを作成
webBrowser1.DrawToBitmap(bitmap, new Rectangle(0, 0, webBrowser1.Width, webBrowser1.Height)); // WebBrowserの内容をビットマップに描画
// スクリーンショットを保存
bitmap.Save("screenshot.png", ImageFormat.Png); // PNG形式で保存
MessageBox.Show("スクリーンショットを取得しました!"); // メッセージを表示
}
}
このコードでは、Webページが読み込まれた後にスクリーンショットを取得し、指定したファイル名で保存しています。
これにより、表示されているWebページの画像を簡単に保存することができます。
トラブルシューティング
ページが表示されない場合の対処法
WebBrowserコントロールでページが表示されない場合、いくつかの原因が考えられます。
以下の対処法を試してみてください。
- URLの確認: 指定したURLが正しいか確認します。
特に、プロトコル(http://またはhttps://)が正しく指定されているかをチェックします。
- インターネット接続: インターネット接続が正常であるか確認します。
接続が不安定な場合、ページが読み込まれないことがあります。
- セキュリティ設定: Windowsのセキュリティ設定やファイアウォールがWebBrowserコントロールの動作を妨げている可能性があります。
設定を見直してみてください。
- キャッシュのクリア: WebBrowserコントロールのキャッシュが原因でページが表示されないことがあります。
キャッシュをクリアする方法を検討してください。
スクリプトエラーの対応
WebBrowserコントロールでスクリプトエラーが発生する場合、以下の対処法を試みることができます。
- スクリプトエラーの無効化: スクリプトエラーを非表示にするには、
ScriptErrorsSuppressed
プロパティをtrue
に設定します。
これにより、エラーメッセージが表示されなくなります。
webBrowser1.ScriptErrorsSuppressed = true; // スクリプトエラーを非表示に設定
- JavaScriptの確認: 表示しようとしているWebページのJavaScriptが正しく動作しているか確認します。
特に、外部ライブラリやAPIが正しく読み込まれているかをチェックします。
- 互換性設定: WebBrowserコントロールはInternet Explorerのエンジンを使用しているため、互換性の問題が発生することがあります。
WebBrowser
のVersion
を指定することで、異なるバージョンのIEを使用することができます。
レンダリングの問題解決
WebBrowserコントロールで表示されるWebページのレンダリングに問題がある場合、以下の対処法を試してみてください。
- IEのバージョン確認: WebBrowserコントロールは、デフォルトで古いバージョンのInternet Explorerを使用します。
最新のWeb標準に対応させるために、レジストリでIEのバージョンを指定することができます。
以下のレジストリキーを追加または変更します。
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
ここに、アプリケーションのEXEファイル名をキーとして追加し、値を11001
(IE11)に設定します。
- CSSやJavaScriptの確認: Webページのスタイルやスクリプトが正しく適用されているか確認します。
特に、CSSのパスやJavaScriptの読み込みに問題がないかをチェックします。
- HTMLの検証: 表示しようとしているHTMLが正しいかどうかを検証します。
HTMLの構文エラーがあると、正しくレンダリングされないことがあります。
HTMLバリデーターを使用して、エラーをチェックしてください。
これらの対処法を試すことで、WebBrowserコントロールでのトラブルを解決できる可能性があります。
まとめ
この記事では、C#のWebBrowserコントロールの基本的な使い方から、応用例やトラブルシューティングの方法まで幅広く解説しました。
WebBrowserコントロールを活用することで、WindowsフォームアプリケーションにWebコンテンツを組み込むことが可能になり、さまざまな機能を実現できます。
これを機に、WebBrowserコントロールを使ったアプリケーション開発に挑戦してみてはいかがでしょうか。