Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C#] WebBrowser restituisce riferimento nullo con GetElementById

  1. #1
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,367

    [C#] WebBrowser restituisce riferimento nullo con GetElementById

    codice:
       
     string HTML="      <table id='header'  style='width:100%;font-size:10px;' >        <tr>            <td rowspan='2'>              <img src='C:\\SVILUPPO 2017\\NEWLAB5.0\\DREAMlab\\bin\\Debug\\Support\\PrintFormat\\img\\logo_dream_2_LAB.png' />            </td>            <td >                <p align='center'  >                    <strong></strong>                </p>            </td>            <td >&nbsp;</td>        </tr>        <tr>            <td>               <p align='center'  >                    <strong >LABORATORIO DREAM MAPUTO</strong></p>            </td>            <td>&nbsp;</td>        </tr>        <tr>            <td ></td>            <td >                <p align='center'  >                    <strong>contacto tel.................... email,,,,,,,,,,,,</strong></p>            </td>            <td ></td>        </tr>        <tr>            <td>&nbsp;</td>            <td>                <p align='center'  ><strong>Avenida Eduardo Mondlane 179 MAPUTO</strong></p>            </td>            <td>&nbsp;</td>        </tr>        <tr>            <td ></td>            <td ><p align='center'  > </p>            </td>            <td ></td>        </tr>        <tr>            <td>&nbsp;</td>            <td>&nbsp;</td>            <td>&nbsp;</td>        </tr>    </table>  ";
    
      WebBrowser w = new WebBrowser();
                w.DocumentText = HTML;
                HtmlElement mytable = w.Document.GetElementById("header");
    dato il codice
    dovrei cercare nel codice HTML passato come parametro e gestire il tutto da c#
    purtroppo webbrowser nonostante il mio ID non riconosce il controllo

    cosa c'è di sbagliato? eppure il ID è esatto "header"

    p.s.
    uso windowsForm
    Ultima modifica di Kahm; 11-10-2018 a 16:12
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,750
    Il problema deriva dal fatto che, quando imposti l'HTML attraverso la proprietà DocumentText, il browser reagisce "dimenticando" il contenuto del documento attuale, impostando un URL vuoto (about:blank) e impostando come documento attivo quello specificato come parametro alla proprietà.

    Una volta impostato il markup HTML, la navigazione del browser avviene in modo asincrono così come il parsing del documento stesso, quindi se cerchi di navigare da subito al suo interno, otterrai solo eccezioni e riferimenti null.

    Devi intercettare l'evento DocumentCompleted per essere notificato al momento in cui il browser ha finito il parsing del documento HTML.

    Questo principio di funzionamento deriva dal fatto che l'HTML generalmente viene scaricato dalla rete, quindi il documento viene interpretato poco alla volta fino a quando non è stato scaricato tutto.

    Se provi l'approccio mostrato nel codice che segue, ottenuto modificando il tuo, vedrai che tutto funziona.

    codice:
    private void DumpHeaderTable(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
    	var webBrowser = (WebBrowser)sender;
    	var headerTable = webBrowser.Document.GetElementById("header");
    	headerTable.Dump();
    }
    
    void Main()
    {
    	string HTML = "      <table id='header'  style='width:100%;font-size:10px;' > ...   </table>  ";
    
    	var w = new WebBrowser();
    	w.DocumentCompleted += DumpHeaderTable;	
    	w.DocumentText = HTML;	
    }
    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Delphi Succinctly (e-book)

  3. #3
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,367
    si funziona
    grazie
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  4. #4
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,367
    un'ultima richiesta:
    se eseguo il codice da FormLoad, esegue DumperHeadTable solo al completamento del FormLoad
    mi servirebbe prima, altrimenti non riesco a fare alcune operazioni

    grazie
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,750
    Quote Originariamente inviata da Kahm Visualizza il messaggio
    se eseguo il codice da FormLoad, esegue DumperHeadTable solo al completamento del FormLoad
    mi servirebbe prima, altrimenti non riesco a fare alcune operazioni
    Prima quando? Posta il codice e prova a spiegare perché non mi è molto chiaro...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Delphi Succinctly (e-book)

  6. #6
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,367
    Quote Originariamente inviata da alka Visualizza il messaggio
    Prima quando? Posta il codice e prova a spiegare perché non mi è molto chiaro...
    ecco ho un piccolo progettino da scaricare che dimostra il mio problema
    qui http:\\medicardonline.com/DELETE/WindowsFormsApp1.zip

    in pratica vorrei modificare piu label dentro webBrowser
    ma come puoi notare essendo che si attiva al caricamento del documento mi modifica solo l'ultimo controllo che gli imposto

    grazie
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2018 vBulletin Solutions, Inc. All rights reserved.