Webbrowser在html元素中查找文本对话框

时间:2015-04-28 13:42:43

标签: c# winforms search webbrowser-control textrange

我尝试在我的webbroser控件中使用查找对话框功能,它应该搜索多个单词(向前)并突出显示它们。 我尝试了this MSDN question

中的以下代码
    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()创建范围,我想在特定元素中搜索(例如,只搜索特定{{1}中的文本})

我该怎么做?

1 个答案:

答案 0 :(得分: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;
    }