VB.NET SetAttribute в WebBrowser не работает - PullRequest
0 голосов
/ 07 июня 2018

Я провел некоторое исследование ранее, но все ответы не работают .Атрибут «value» существует в элементе, но не отображается ни в webBrowser, ни во входных данных.Это мой код до тех пор, мне нужно, чтобы webBrowser прочитал html файл , а затем загрузил ваши ответы или значения из ваших входных данных из базы данных.

PS : Мое приложение создается в режиме реального времени, на экране нет элемента управления веб-браузером, оно создается вскоре после чтения html-файла и только после этого помещается на панель.

    Dim webBrowser As WebBrowser = New WebBrowser
    Dim _doc As HtmlDocument
    Dim htmlPath As String = "C:\ePrimeCare\Platis\Debug\Protocolos\" + 
    nomeProtocolo + "_" + idSistema.ToString() + ".html"
    webBrowser.ScriptErrorsSuppressed = True
    webBrowser.Navigate(htmlPath)
    _doc = webBrowser.Document.OpenNew(False)
    'webBrowser.DocumentText = IO.File.ReadAllText(htmlPath).ToString()
    'webBrowser.Document.OpenNew(False)
    'RetornaRespostasAnteriores(idSistema, idFicha, nomeProtocolo, _doc, Convert.ToDateTime(dtVisita))
    _doc.Title = nomeProtocolo
    _doc.Write(IO.File.ReadAllText(htmlPath).ToString())
    Dim carregaRespostas As CarregarRespostaProtocoloHTML = New CarregarRespostaProtocoloHTML
    Dim respostas As DataTable = carregaRespostas.BuscarRespostasProtocoloAnterior(idFicha, idSistema, dtVisita)

    Dim idopcaoitem As String = 0
    Dim idsetitem As String = 0
    Dim value As DataRow()
    Dim strArr As String()
    For Each element As HtmlElement In _doc.GetElementsByTagName("input")
        Dim type As String = element.GetAttribute("type")
        Select Case type
            Case "text"
                strArr = element.GetAttribute("id").Split("_") 'For get the two ids
                idopcaoitem = strArr(0)
                value = respostas.Select(("IDOPCAOITEM = " + idopcaoitem.ToString()))
                If value.Length > 0 Then
                    element.SetAttribute("value", value(0)(2).ToString())'Here i try to set the value, but does not work
                End If
            Case "radio"
                Debug.WriteLine("Input de radio")
            Case "checkbox"
                Debug.WriteLine("Input de checkbox")
            Case "hidden"
                Debug.WriteLine("Input de hidden")
            Case Else
                Debug.WriteLine("Outro input")
        End Select
    Next
    _doc.Write(IO.File.ReadAllText(htmlPath).ToString())
    webBrowser.Refresh(WebBrowserRefreshOption.Completely)
    webBrowser.Dock = Dock.Fill
    pnlMain.Controls.Add(webBrowser)

1 Ответ

0 голосов
/ 08 июня 2018

Вся перезапись вашего документа и обновление, которое вы делаете в конце, перезапишут любые изменения, которые вы в него внесли.

'Either of these will revert the document back to its original state.
_doc.Write(IO.File.ReadAllText(htmlPath).ToString())
webBrowser.Refresh(WebBrowserRefreshOption.Completely)

Вам даже не нужно звонить _doc.Write(), так как WebBrowser1.Navigate(htmlPath) будет работатьтак же хорошо.

Новый код:

Dim webBrowser As New WebBrowser 'Shorthand statement.
Dim _doc As HtmlDocument
Dim htmlPath As String = "C:\ePrimeCare\Platis\Debug\Protocolos\" + 
nomeProtocolo + "_" + idSistema.ToString() + ".html"
webBrowser.ScriptErrorsSuppressed = True
webBrowser.Navigate(htmlPath)
_doc = webBrowser.Document 'Removed OpenNew().
_doc.Title = nomeProtocolo

Dim carregaRespostas As New CarregarRespostaProtocoloHTML 'Another shorthand statement.
Dim respostas As DataTable = carregaRespostas.BuscarRespostasProtocoloAnterior(idFicha, idSistema, dtVisita)

(...your variables...)

For Each element As HtmlElement In _doc.GetElementsByTagName("input")

    (...your code...)

Next

'(Removed _doc.Write() and Refresh() since they will undo all changes)

webBrowser.Dock = Dock.Fill
pnlMain.Controls.Add(webBrowser)
...