C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 12 を表示中)
■3416 / )  Re[5]: WebBrowserのページ内検索の実装
□投稿者/ さとみ (8回)-(2007/05/09(Wed) 23:15:07)
No3399 (さとみ さん) に返信
なんとか無事に検索処理ができました。
魔界の仮面弁士さんありがとうございました。
意味のあるスレッドになるように情報を残しておきます。

・C#にMSHTMLの参照設定の方法
「MSDN Home > MSDN アカデミック アライアンス > 第 2 回 VC# で MSHTML」
で解説されています。
http://www.microsoft.com/japan/msdn/academic/Articles/fun/02/
・組み込んだMSHTMLとIHTMLDocument2の使い方
http://pedroluismateo.blogspot.com/2007/01/c-net-seleccionar-texto-dentro-de-un.html
・文字列検索、文字列の選択、背景の色替え(ハイライト)
下記の関数(メソッド)を利用詳細はurlをご覧下さい。
createTextRange
scrollIntoView
select
execCommand
collapse
findText
http://tomizawa-web.hp.infoseek.co.jp/method.htm
・サンプル(ハイライト処理)
mshtml.IHTMLDocument2 doc = webBrowser1.Document.DomDocument as mshtml.IHTMLDocument2;
mshtml.IHTMLBodyElement body = doc.body as mshtml.IHTMLBodyElement;
mshtml.IHTMLTxtRange objRange;
String BMK = "";
bool ret;
objRange = body.createTextRange();
while (true)
{
  //文字列検索
ret = objRange.findText(textBox1.Text, 1, 0);
if ( ret == false)
{
    //見つからなかった(ハイライト処理終了)
break;
}
  //見つかった文字列の部分の背景の色を黄色に変更
objRange.execCommand("BackColor", false, "YELLOW");
//次の検索開始位置を後方にづらす。
objRange.collapse(false);
}
・サンプル(検索文字選択処理)
//mshtml.IHTMLDocument2 doc = webBrowser1.Document.DomDocument as mshtml.IHTMLDocument2;
//mshtml.IHTMLBodyElement body = doc.body as mshtml.IHTMLBodyElement;
//mshtml.IHTMLTxtRange objRange;
String BMK = "";
bool ret;
int cnt =0;
//グローバルに保存しておく(ページ読込み完了時に行う)
//objRange = body.createTextRange();

//キーワードを順番に検索して次、次と順にキーワードを
//選択していくようにする処理のループ
while (true)
{
//文字列検索
ret = objRange.findText(textBox1.Text, 1, 0);
if (ret == false)
{
//見つからない時検索終了
flag_key = 0;
//オブジェクト初期化
objRange = body.createTextRange();
break;
}
//指定した位置のキーワードの時選択して反転表示にする
if (flag_key == cnt)
{
//検索で見つかった文字列を選択して反転表示する
objRange.select();
//スクロールバーの位置を選択している文字列に移動
objRange.scrollIntoView(false);
//次のキー選択用にキー選択用フラグを次の位置に設定
flag_key = cnt + 1;
//オブジェクト初期化
objRange = body.createTextRange();
//ループを抜ける
break;
}
//指定のキーワードのになるまでインクリメント
cnt++;
//検索位置を後方にづらす
objRange.collapse(false);
}
・最後に問題?(ハイライトしたの背景を元に戻す処理
調査中
URLを再度読み直せばできるけどスマートでないので・・・
objRange.queryCommandValue("BackColor");
で背景の色をとって最初に保存しておけばできると思うが
objRange.queryCommandValue("BackColor");
の戻り値の使い方がまだ理解できていない。

以上

解決済み
返信 編集キー/


管理者用

- Child Tree -