пытаясь выделить слова в элементе управления WebBrowser - PullRequest
0 голосов
/ 10 апреля 2011

Я пытаюсь, чтобы мой элемент управления WebBrowser выделил несколько слов. я нашел это пример , но я не понимаю, как перевести это на c #. любая помощь будет оценена :) 1003 *

Ответы [ 2 ]

1 голос
/ 17 июля 2018

Упомянутый пример фактически заменит содержимое.Таким образом, он может получить неправильный вывод при поиске совпадений текста с текстом с заглавными буквами .Поэтому может быть полезно использовать indexOf и Insert вместо Replace.

Вот как.

Private Sub WebBrowser_DocumentCompleted(sender As Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser.DocumentCompleted
        Dim doc2 As mshtml.IHTMLDocument2 = WebBrowser.Document.DomDocument
        Dim ReplacementTag As String = "<span style='background-color: rgb(255, 255, 0);'>"
        Dim strBuilder As StringBuilder = New StringBuilder(doc2.body.outerHTML)
        Dim HTMLString As String = strBuilder.ToString()
        If Me.m_NoteType = ExtractionNoteType.SearchResult Then
            Dim SearchWords As New List(Of String)
            SearchWords.AddRange(Me.txtNoteSearch.Text.Trim.Split(" "))
            For Each item As String In SearchWords
                Dim index As Integer = HTMLString.IndexOf(item, 0, StringComparison.InvariantCultureIgnoreCase)
                ''If index > 0 Then
                While (index > 0 AndAlso 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)
                End While
                ''End If
                ''strBuilder.Replace(item, "<span style='background-color: rgb(255, 255, 0);'>" + item + "</span>")
            Next
        Else
            ''strBuilder.Replace("<span style='background-color: rgb(255, 255, 0);'>", "<span style='background-color: rgb(255, 255, 255);'>")
        End If
        doc2.body.innerHTML = HTMLString
    End Sub
1 голос
/ 10 апреля 2011

Код уже находится в C #. Вам нужно добавить ссылку, чтобы получить определения типа интерфейса. Это COM-типы, импортированные из библиотеки типов Internet Explorer.

Проект + Добавить ссылку, вкладка Обзор, выберите c: \ windows \ system32 \ mshtml.tlb. Поместите using mshtml; вверху вашего файла исходного кода. Код довольно неаккуратный с типами COM, если вы используете VS2010, вам нужно будет выбрать добавленную ссылку (MSHTML) в узле References и установить для свойства Embed Interop Types значение False и для свойства Copy Local значение True. Разверните библиотеку взаимодействия Microsoft.mshtml.dll, в которой вы найдете каталог сборки вместе с вашей программой.

...