попытка выделить слова в элементе управления WebBrowser

#c# #.net #webbrowser-control #highlighting

#c# #.net #webbrowser-control #выделение

Вопрос:

я пытаюсь заставить мой элемент управления WebBrowser выделить некоторые слова. я нашел этот пример, но я не понимаю, как перевести это на c #. буду признателен за любую помощь 🙂

Комментарии:

1. @TBohnen.jnr добавил это, извините 🙂

Ответ №1:

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

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

Комментарии:

1. @ Hans Passant То, что я сделал, теперь у меня есть несколько ошибок, например, этот тип взаимодействия ‘mshtml. HTMLDocumentClas не может быть встроен. Используйте установленный соответствующий интерфейс.

2. какой интерфейс я должен использовать?

3. Я явно предупреждал вас об этом, «не может быть внедрен» требует установки свойству Embed Interop Types значения false. Пожалуйста, просмотрите мой пост.

4. спасибо за помощь, однако у меня есть вопрос и проблема, вопрос:

5. вопрос: что вы подразумеваете под развертыванием и почему я должен это делать, и теперь я получаю сообщение об ошибке: в этой строке code HTMLDocumentClass doc = webBrowser1.Document как HTMLDocumentClass; code у меня следующая ошибка: Ошибка 1 Не удается преобразовать тип ‘System. Windows. Формы. HTMLDocument’ to’mshtml. HTMLDocumentClass’ с помощью преобразования ссылки, преобразования упаковки, преобразования распаковки, преобразования переноса или преобразования нулевого типа

Ответ №2:

Упомянутый пример фактически заменит содержимое. Таким образом, при поиске текста, совпадающего с текстом с заглавными буквами, может быть получен неправильный вывод. Поэтому может быть полезно использовать 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