0

Webbroser コントロールに検索ダイアログ機能を持たせようとしましたが、いくつかの単語を (前方に) 検索し、それらを強調表示する必要があります。このMSDNの質問から次のコードを試しました

    private bool FindFirst(string text)
    {
        IHTMLDocument2 doc = (IHTMLDocument2)browserInstance.Document;
        IHTMLSelectionObject sel = (IHTMLSelectionObject)doc.selection;
        sel.empty(); // get an empty selection, so we start from the beginning
        IHTMLTxtRange rng = (IHTMLTxtRange)sel.createRange();
        if (rng.findText(text, 1000000000, 0))
        {
            rng.select();
            return true;
        }
        return false;
    }

ただし、このコードと元の質問のコードはドキュメント全体を検索し range = body.createTextRange()、範囲を作成するために使用します。特定の要素内で検索したい (たとえば、特定のテキストのみdiv)

どうやってやるの?

4

1 に答える 1

0

コードにmoveToElementText(..)を追加して問題を解決しました。範囲の開始位置と終了位置が指定された要素のテキストを包含するように、テキスト範囲を移動します。

  bool FindFirst(HtmlElement elem, string text)
  {
        if (elem.Document != null)
        {
            IHTMLDocument2 doc =
                elem.Document.DomDocument as IHTMLDocument2;
            IHTMLSelectionObject sel = doc.selection as IHTMLSelectionObject;
            sel.empty();

            IHTMLTxtRange rng = sel.createRange() as IHTMLTxtRange;
           // MoveToElement causes the search begins from the element
            rng.moveToElementText(elem.DomElement as IHTMLElement);
            if (rng.findText(text, 1000000000, 0))
            {
                rng.select();
                rng.scrollIntoView(true);
                return true;
            }               
        }
        return false;
  }
   public bool FindNext(HtmlElement elem, string text)
    {
        if (elem.Document != null)
        {
            IHTMLDocument2 doc =
                elem.Document.DomDocument as IHTMLDocument2;
            IHTMLSelectionObject sel = doc.selection as IHTMLSelectionObject;              
            IHTMLTxtRange rng = sel.createRange() as IHTMLTxtRange;
            rng.collapse(false);
            if (rng.findText(text, 1000000000, 0))
            {
                rng.select();
                rng.scrollIntoView(true);
                return true;
            }
        }
        return false;
    }
于 2015-04-30T05:51:17.020 に答える