webbrowserコントロールでIEの「このページの検索」を行うには

タグの編集
投稿者 toru0298  (社会人) 投稿日時 2009/8/25 06:47:16
現在私は、VB2008 EXPRESS でwebbrowserコントロールを配置したブラウザを作成していますが、このブラウザに、IEの「このページの検索」のような機能を実装したいと考えています。
 例えば、textboxに検索する文字を入力し、ボタンを押すと、webbrowserで表示されているwebページの中の検索された文字が反転され、その位置までスクロールされるというものを考えています。
 このようなことを行うにはどのようにすれば良いか、教えていただきたいと思います。お願いします。
投稿者 るしぇ  (社会人) 投稿日時 2009/8/26 22:44:56
まずは調べてください。

例えば
「VB.net webbrowser 検索」あたりのキーワードでWEB検索すれば
それらしい情報が引っ掛かります。
投稿者 wii  (中学生) 投稿日時 2009/9/5 20:47:17
はじめまして。
僕もブラウザは何度か作りました。いま実はそのブラウザを使ってる(笑)

まず、webbrowserの上で、Ctrl+Fを押してみて下さい。
検索できると思います。

「それじゃダメ」なら僕にはできません。ごめんなさい。
投稿者 brv  (中学生) 投稿日時 2009/9/5 23:23:11
僕も今ブラウザを作っていて、自分でテキストを検索するようにしようと思っていますが、
実現できていません。

るしぇさんの言うとおりに、「VB.net webbrowser 検索」でググったらそれっぽいものがヒットしました。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=3359&KLOG=12

ActiveXのWebBrowserをいじくって、何とかするしか方法はなさそうです。
投稿者 brv  (中学生) 投稿日時 2009/9/5 23:44:56
るしぇさんに紹介していただいたページを参考にしたら、できました。

Private Sub Find(ByVal browser As WebBrowser, ByVal str As String)
        Dim Doc As mshtml.HTMLDocument       'MSHTML.HTMLDocument 
        Dim Body As mshtml.HTMLBody      'MSHTML.HTMLBody 
        Dim Range As mshtml.IHTMLTxtRange  'MSHTML.IHTMLTxtRange 
        Dim BMK As String = ""

        '検索文字列を入れておいてください。 
        If String.IsNullOrEmpty(str) Then
            Return
        End If

        Doc = DirectCast(browser.Document.DomDocument, mshtml.IHTMLDocument2)
        Body = Doc.body
        Range = Body.createTextRange

        '≫≫≫≫≫ 検索開始 
        Do While Range.findText(str)
            '最初に見つかった位置を保存しておきます。 
            If String.IsNullOrEmpty(BMK) = 0 Then

            End If
            BMK = Range.getBookmark

            '検索した語句を黄色く反転させる。 
            Range.execCommand("BackColor"False"YELLOW")

            '論理カーソル位置を、検索した語句の末尾に移動させる。 
            Range.collapse(False)
        Loop
        '≪≪≪≪≪ 検索終了 

        'ついでに、最初に見つけた語句の位置までスクロールさせています。 
        If Not String.IsNullOrEmpty(BMK) Then
            Range.moveToBookmark(BMK)
            Range.scrollIntoView()
        End If

        '最後は一応、後始末を。 
        Range = Nothing
        Body = Nothing
        Doc = Nothing
    End Sub


http://yaplog.jp/orator/archive/9
ここにあったVB6のコードを、VB.NETにかきかえただけです。
browserに探す対象のブラウザ、strに探す語句を入れると、その語句が反転します。
るしぇさん、ありがとうございました。
投稿者 toru0298  (社会人) 投稿日時 2009/9/8 14:22:46
みなさん回答ありがとうございました。
 個人的に参考になったのは、wiiさんの説明にあった「Ctrl+F」です。もともとそういう機能が備わっているという事を知りませんでした。これならばコードを追加する必要がありませんね。助かりました。
 brvさんには、丁寧にコードまで記載していただきありがとうございます。しかし、私は今作っているブラウザが初めての作品であり、VBも.NETも分からずに本やインターネットを見ながら作っている状態で、コードについてはほとんど分かりません。ですから、折角のコードも私には理解不能です。
 今後、こういう難しいコードについても理解した上で作れるようになりたいと思っています。ウェブブラウザーコントロールの文字を「検索」、「反転」するテクニックは応用範囲も広いと思われ、後々参考にさせていただきたいと思っています。また、色々と教えてください。
 ありがとうございました。