实施“;查找下一个“;在C#中的web浏览器控件中

本文关键字:web 浏览器 中的 控件 查找 下一个 实施 | 更新日期: 2023-09-27 18:25:02

我在form中嵌入了一个web browser控件。在表单加载时,它加载一个本地存储的HTML文件。我已经实现了查找文本功能,以便在web browser控件中加载的HTML文档中查找特定文本。它正在寻找指定单词的第一个出现
但我想同时突出显示指定单词的所有出现,或者更好地实现类似于各种应用程序中的"查找下一个"功能。是否可以对web浏览器进行控制
这是当前代码:

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            string TextToFind;
            TextToFind = toolStripTextBox1.Text;
            if (webBrowser1.Document != null)
            {
                IHTMLDocument2 doc = webBrowser1.Document.DomDocument as IHTMLDocument2;
                if (doc != null)
                {
                    IHTMLSelectionObject currentSelection = doc.selection;
                    IHTMLTxtRange range = currentSelection.createRange() as IHTMLTxtRange;
                    if (range != null)
                    {
                        String search = TextToFind.ToString();
                        if (range.findText(search, search.Length, 2))
                        {
                            range.select();
                        }                            
                    }
                }
            }
        }

谢谢。

实施“;查找下一个“;在C#中的web浏览器控件中

您可以在这里找到问题的代码示例MSDN论坛:WebBrowser查找对话框

希望这正是你想要的。

只需在文本框[here txtNoteSearch]中接受用户的输入,然后按照以下代码实现搜索。下面的代码演示了搜索和高亮显示。

    private void WebBrowser_DocumentCompleted(object sender, System.Windows.Forms.WebBrowserDocumentCompletedEventArgs e)
{
    mshtml.IHTMLDocument2 doc2 = WebBrowser.Document.DomDocument;
    string ReplacementTag = "<span style='background-color: rgb(255, 255, 0);'>";
    StringBuilder strBuilder = new StringBuilder(doc2.body.outerHTML);
    string HTMLString = strBuilder.ToString();
    if (this.m_NoteType == ExtractionNoteType.SearchResult)
    {
        List<string> SearchWords = new List<string>();
        SearchWords.AddRange(this.txtNoteSearch.Text.Trim.Split(" "));
        foreach (string item in SearchWords)
        {
            int index = HTMLString.IndexOf(item, 0, StringComparison.InvariantCultureIgnoreCase);
            // 'If index > 0 Then
            while ((index > 0 && index < HTMLString.Length))
            {
                HTMLString = HTMLString.Insert(index, ReplacementTag);
                HTMLString = HTMLString.Insert(index + item.Length + ReplacementTag.Length, "</span>");
                index = HTMLString.IndexOf(item, index + item.Length + ReplacementTag.Length + 7, StringComparison.InvariantCultureIgnoreCase);
            }
        }
    }
    else
    {
    }
    doc2.body.innerHTML = HTMLString;
}