在C#中的Web浏览器控件中实现“查找下一个”

时间:2012-02-19 13:47:58

标签: c# windows visual-studio-2008

我在web browser中嵌入了form控件。在表单加载时,它加载本地存储的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();
                        }                            
                    }
                }
            }
        }

感谢。

2 个答案:

答案 0 :(得分:0)

您可以在MSDN Forums: WebBrowser Find Dialog

找到问题的代码示例

希望这正是您所寻找的。

答案 1 :(得分:0)

只需在文本框[此处为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;
}