【3/18〜】Amazon、VMwareが語る『クラウドの未来』 スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
 

.NET TIPS

WebBrowserコントロールのコンテンツを文字列により設定するには?[2.0、C#、VB]

デジタルアドバンテージ 遠藤 孝信
2008/08/07

 Windowsフォーム用のWebBrowserコントロール(.NET Framework 2.0以降で利用可能)では、UriプロパティにURLを設定するか、URLを引数にしてNavigateメソッドを呼び出し、ページを表示するのが一般的だが、HTMLコードの文字列をWebページとして表示することも可能だ。ここではその方法を2つ紹介する。

DocumentTextプロパティによる表示

 1つ目の方法は非常にシンプルで、WebBrowserコントロールのDocumentTextプロパティに、HTMLの内容を含んだ文字列をセットするだけだ。

 次のサンプル・コードでは、WebClientクラス(System.Net名前空間)によりInsider.NETのトップ・ページのHTMLを取得し、それをWebBrowserコントロールに表示している。

// HTMLデータの取得
WebClient wc = new WebClient();
wc.Proxy = null;
wc.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS");
string html = wc.DownloadString("http://www.atmarkit.co.jp/fdotnet");

webBrowser1.DocumentText = html;
' HTMLデータの取得
Dim wc As New WebClient()
wc.Proxy = Nothing
wc.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
Dim html As String = wc.DownloadString("http://www.atmarkit.co.jp/fdotnet")

WebBrowser1.DocumentText = html
DocumentTextプロパティによりHTMLを表示(上:C#、下:VB)
変数webBrowser1はWebBrowserコントロールを参照しているものとする。また、WebClientクラスを使用しているため、System.Net名前空間のインポートが必要。

 WebClientクラスの使い方については「TIPS:WebClientクラスでWebページを取得するには?」で解説している。

 なお、当然ながら、相対URLで記述されている要素(=絶対URLで記述されていない要素。例えば「<img src="images/fdotnet_m.gif">」)については、正しく表示などが行えない。

OpenNew/Writeメソッドによる表示

 もう1つの方法は、WebBrowserコントロールに表示されているドキュメントを示すHtmlDocumentオブジェクト(Documentプロパティから取得できる)に対して、WriteメソッドによりHTMLを書き込む方法だ。メソッドの引数にはHTMLの内容を含んだ文字列を指定する。このとき、事前にOpenNewメソッドを呼び出すことにより、現在表示中のドキュメントの内容をクリアできる。

 ただし、アプリケーションの起動直後は、WebBrowserコントロールにHtmlDocumentオブジェクトが割り当てられていない。このため、下記のサンプル・コードのように、Navigateメソッドにより空白ページに移動するなどして、WebBrowserコントロールにページ表示をさせる処理が最初に必要となる。

// HTMLデータの取得
WebClient wc = new WebClient();
wc.Proxy = null;
wc.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS");
string html = wc.DownloadString("http://www.atmarkit.co.jp/fdotnet");

// アプリケーション起動直後はドキュメントが存在しない
if (this.webBrowser1.Document == null)
{
  webBrowser1.Navigate("about:blank"); // 空白ページを開く
}

webBrowser1.Document.OpenNew(true); // クリア
webBrowser1.Document.Write(html); // 書き込み
' HTMLデータの取得
Dim wc As New WebClient()
wc.Proxy = Nothing
wc.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
Dim html As String = wc.DownloadString("http://www.atmarkit.co.jp/fdotnet")

' アプリケーション起動直後はドキュメントが存在しない
If WebBrowser1.Document = Nothing Then
  WebBrowser1.Navigate("about:blank") ' 空白ページを開く
End If

WebBrowser1.Document.OpenNew(True) ' クリア
WebBrowser1.Document.Write(html) '書き込み
WriteメソッドによりHTMLを表示(上:C#、下:VB)
変数webBrowser1はWebBrowserコントロールを参照しているものとする。また、WebClientクラスを使用しているため、System.Net名前空間のインポートが必要。

 なお、OpenNewメソッドの引数には、WebBrowserコントロールが保持する履歴の現在のエントリを新しいドキュメントで置き換えるかどうかを指定する。

2つの方法の違い

 以上、2つの方法を示したが、DocumentTextプロパティに文字列をセットした場合には、Navigating、Navigated、DocumentCompletedなどのイベントが発生するのに対して、Writeメソッドで文字列を書き込んだ場合には、これらのイベントは発生しない。これが2つの方法の大きな違いといえる。End of Article

利用可能バージョン:.NET Framework 2.0以降
カテゴリ:Windowsフォーム 処理対象:WebBrowserコントロール
使用ライブラリ:WebBrowserコントロール(System.Windows.Forms名前空間)
使用ライブラリ:WebClientクラス(System.Net名前空間)
使用ライブラリ:HtmlDocumentクラス(System.Windows.Forms名前空間)
関連TIPS:WebClientクラスでWebページを取得するには?

この記事と関連性の高い別の.NET TIPS
WebBrowserコントロールによりWebページからリンクや画像を抽出するには?
WebBrowserコントロールで選択されている文字列をコピーするには?
WebBrowserコントロール内のテキストボックスに文字列をセットするには?
WPFアプリケーションでWebページを表示するには?
[Silverlight 2]HTML要素のstyle属性のCSSプロパティを取得/設定するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

ホワイトペーパーTechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  TomcatやJBossなどAPサーバ環境に関する
情報を集約! “業務”用APサーバ大百科

New!
  一気に解説! 最新のクラスタストレージ
「RAIDを超えたストレージ基準」……など

New!
  クラウド的ユーザー体験の変化は脅威か?
仮想化技術を使いこなす運用管理術を紹介

New!

  上司や部下、部署内メンバーとの情報共有
を“ガラッ”と変えるコラボツールとは?

New!
  おばかアプリ選手権、第4弾開催中!!
ムダにカッコよくてくだらない作品求ム!

  社内ファイルサーバを“クラウド”に統合
VPN直結「クラウド型ストレージ」を紹介

  Twitterのアカウントはなぜ突破された?
メールによる新手の攻撃手法とその対策

  もう仮想化のお試しフェイズは終わりだ!
Hyper-V 2.0が基幹システムも仮想化

  美人!? まあまあ? 気になる いやし系!!
PV急増で「美人時計」がとった手段とは?

  クライアント企業から求められる人材
⇒IT技術と経営戦略を併せ持つ「戦略家」

  .NET編集長が実践する「技術情報検索術」
サンプル・コードを簡単に探す“技”は?

  業務効率と情報セキュリティ対策を両立!
手間なく確実に機密情報を守る方法とは?

  進化を続ける富士通ストレージETERNUS DX
製品開発者の自信を裏付けるものとは何か

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  【CTC事例】約30の基幹システムを統合!
膨大なバッジジョブを制御した方法は?

  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  その数、なんと400台以上! グループ内
サーバの「統合管理」によるメリットは?