windows - Implementering 'Find Next' i webbrowser kontrol i C #

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en web browser kontrol indlejret i en form. Ved formularbelastning lægges det en lokalt lagret HTML-fil. Jeg har implementeret en funktionalitet til findtekst for at finde en bestemt tekst i HTML-dokumentet, der er lagt i web browser kontrol. Det arbejder for at finde den første forekomst af det angivne ord.
Men jeg vil fremhæve alle forekomster af det angivne ord på én gang eller endnu bedre at implementere noget, der er analogt med 'Find Next' -funktionen, der findes i forskellige applikationer. Er det muligt at gøre det til webbrowser kontrol ???
Her er den nuværende kode:



        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();
                        }                            
                    }
                }
            }
        }


Tak.

Bedste reference


Du finder kodeeksemplet til dit spørgsmål her MSDN Forums: WebBrowser Find Dialog [6]


Håber det er præcis det, du leder efter.

Andre referencer 1


Bare indtast input fra brugeren i en tekstboks [[her txtNoteSearch]], og følg derefter følgende kode for at gennemføre søgningen. Følgende kode viser søgningen og fremhæver.


    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;
}