Я реализовал функцию поиска в приложении 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 имеет значение true в обработчике TextChanged окна поиска.
Надеюсь, это поможет.
Редактировать: добавлены свойства тела и документа