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

标签 c# select browser highlighting

问题来了: 我想让我的程序的用户能够在 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();

任何人都可以提供一种方法来让它在 webBrowser 中工作吗?

最佳答案

我在具有嵌入式 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;
        }
    }
}

m_fTextIsNew 在搜索框的 TextChanged 处理程序中设置为 true。

希望这对您有所帮助。

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

关于c# - 如何以编程方式选择 webBrowser 控件中的文本? C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3915871/

相关文章:

mysql - 检查两列之间的输入值

php - MySQL从多个表中选择

c# - 委托(delegate)为属性 : Bad Idea?

c# - 覆盖 Picturbox OnPaint 事件以旋转图像 - 创建自定义 Picturebox

c# - 如何从 EpiServer PageData 对象中提取友好的 URL?

arrays - 如何从哈希数组中过滤掉哈希?

javascript - 如何检测 Angular 4 中的浏览器版本以防止在 IE 中使用

c# - 是否可以强制 WebBrowser 替换当前打开的窗口,而不是在新窗口中打开?

javascript - 强制浏览器刷新 CSS、JavaScript 等

c# - 在 Roslyn 项目中创建新文件夹