如何以编程方式选择webBrowser控件中的文本?c#

如何以编程方式选择webBrowser控件中的文本?c#,c#,select,browser,highlighting,C#,Select,Browser,Highlighting,问题是: 我想让程序的用户能够在webBrowser控件中搜索给定的关键字(标准Ctrl+F)。在文档中查找关键字并使用span和replace()函数突出显示所有实例没有问题。我在获得我想要工作的“查找下一个”功能时遇到困难。当用户单击“查找下一个”时,我希望文档滚动到下一个实例。如果我能得到一个边界框,我可以使用导航功能。我使用以下代码在富文本框中使用相同的功能 //Select the found text this.rich

问题是: 我想让程序的用户能够在webBrowser控件中搜索给定的关键字(标准Ctrl+F)。在文档中查找关键字并使用span和replace()函数突出显示所有实例没有问题。我在获得我想要工作的“查找下一个”功能时遇到困难。当用户单击“查找下一个”时,我希望文档滚动到下一个实例。如果我能得到一个边界框,我可以使用导航功能。我使用以下代码在富文本框中使用相同的功能

                //Select the found text
                this.richTextBox.Select(matches[currentMatch], text.Length);
                //Scroll to the found text
                this.richTextBox.ScrollToCaret();
                //Focus so the highlighting shows up
                this.richTextBox.Focus();

有人能提供一种方法让它在网络浏览器中运行吗

我在带有嵌入式Web浏览器控件的WinForms应用程序中实现了一个搜索功能。它有一个单独的文本框,用于输入搜索字符串和一个“查找”按钮。如果搜索字符串自上次搜索以来已更改,则单击按钮表示常规查找,否则表示“再次查找”。下面是按钮处理程序:

private IHTMLTxtRange m_lastRange;
private AxWebBrowser m_browser;

private void OnSearch(object sender, EventArgs e) {

    if (Body != null) {

        IHTMLTxtRange range = Body.createTextRange();

        if (! m_fTextIsNew) {

            m_lastRange.moveStart("word", 1);
            m_lastRange.setEndPoint("EndToEnd", range);
            range = m_lastRange;
        }

        if (range.findText(m_txtSearch.Text, 0, 0)) {

            try {
                range.select();

                m_lastRange = range;

                m_fTextIsNew = false;
            } catch (COMException) {

                // don't know what to do
            }
        }
    }
}

private DispHTMLDocument Document {
    get {
        try {
            if (m_browser.Document != null) {
                return (DispHTMLDocument) m_browser.Document;
            }
        } catch (InvalidCastException) {

            // nothing to do
        }

        return null;
    }
}

private DispHTMLBody Body {
    get {
        if ( (Document != null) && (Document.body != null) ) {
            return (DispHTMLBody) Document.body;
        } else {
            return null;
        }
    }
}
在搜索框的TextChanged处理程序中,m_fTextIsNew设置为true

希望这有帮助


编辑:添加了正文和文档属性

这看起来正是我需要的。还有一个问题。Visual studio没有为我提供createTextRange()函数。我想执行IHTMLTxtRange=this.webBrowser.Document.Body.createTextRange();我是否混淆了您的“Body”属性返回的内容。我在答案中添加了Body和Document的代码。谢谢您,我找到了另一种方法使我的代码(createTextRange)正常工作。所有其他代码都非常有用。findText标志也没有按照我预期的方式工作,但这本身就是一个问题。谢谢!下面是代码,希望这对其他人有帮助。IHTMLDocument2 htmlDoc=(IHTMLDocument2)webBrowser.Document.DomDocument;IHTMLBodyElement Body=htmlDoc.Body作为IHTMLBodyElement;IHTMLTxtRange range=Body.createTextRange();