实施“;查找下一个“;在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();
}
}
}
}
}
谢谢。
您可以在这里找到问题的代码示例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;
}