Je sais que ce sujet est assez ancien mais j'ai rencontré le même problème que l'auteur du sujet et pendant toutes les recherches que j'ai faites pour le résoudre, j'ai finalement trouvé ma réponse. Je profite donc de l'occasion pour le partager ici.
Voici les méthodes que j'utilise pour effectuer ma recherche dans mon navigateur Web et de mettre en évidence le mot trouvé:
private bool FindFirst(string text)
{
var doc = (IHTMLDocument2)WebBrowser.Document.DomDocument;
var sel = (IHTMLSelectionObject)doc.selection;
sel.empty(); // get an empty selection, so we start from the beginning
var rng = sel.createRange() as IHTMLTxtRange;
if (rng != null && rng.findText(text, 1000000000, 0))
{
rng.select();
rng.scrollIntoView(false);
return true;
}
return false;
}
/// <summary>
///
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public bool FindNext(string text)
{
var doc = (IHTMLDocument2)WebBrowser.Document.DomDocument;
var sel = (IHTMLSelectionObject)doc.selection;
var rng = sel.createRange() as IHTMLTxtRange;
if (rng != null)
{
rng.collapse(false); // collapse the current selection so we start from the end of the previous range
if (rng.findText(text, 1000000000, 0))
{
rng.select();
rng.scrollIntoView(false);
return true;
}
else
return FindFirst(text);
}
return false;
}
/// <summary>
///
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public bool FindPrevious(string text)
{
var doc = (IHTMLDocument2)WebBrowser.Document.DomDocument;
var sel = (IHTMLSelectionObject)doc.selection;
var rng = sel.createRange() as IHTMLTxtRange;
if (rng != null)
{
rng.collapse(true); // it should be true,so it goes to start of the document
var found = rng.findText(text, -1, 0); // Range count value should give negative value
if(!found)
{
rng.moveEnd("textedit");
found = rng.findText(text, -1, 0);
}
if (found)
{
rng.select();
rng.scrollIntoView(false);
return true;
}
}
return false;
}
Le seul « problème » avec ce morceau de code est que seule une occurrence de les mots trouvés sont sélectionnés à la fois.
Voici un article qui vous montre comment procéder. http://www.codewrecks.com/blog/index.php/2009/02/13/highlight-words-in-webbrowser-control/ –
Merci, mais cette solution injecte html dans la page qui pourrait gâcher la mise en page et J'essaie d'éviter cette route. J'ai trouvé un lien sur cette page qui essaie de le faire avec javascript et je vais y jeter un coup d'oeil. – evan