2012-05-16 12 views
8

Questo può venire attraverso come incredibilmente stupido, ma non riesco a capire se:C evento Load Control blocca # browser Web con i genitori

  • Sono un idiota
  • ho frainteso qualcosa
  • MS Web Browser controllo è bloccato

Preferisco pensare che sia quest'ultimo.

Ho un controllo Web Browser in un controllo utente WinForms. È stato aggiunto al controllo in fase di progettazione e, in teoria, nell'evento Load del controllo dovrebbe passare a Google.

Sembra semplice.

Tuttavia.

public partial class TVHost : UserControl 
{ 
    public TVHost() 
    { 
     InitializeComponent(); 
    } 

    private void TVHost_Load(object sender, EventArgs e) 
    {  
     webBrowser1.Navigate("http://google.co.uk"); 
    } 
} 

Questo non funziona. Nessun errore, solo niente. L'inserimento di una linea di breakpoint/debug mi mostra che l'evento Load non viene nemmeno chiamato.

Ho deciso a questo punto di verificare che l'evento Load sia impostato correttamente nel file Designer.cs.

this.Load += new System.EventHandler(this.TVHost_Load); 

Sembra legittimo.

Se rimuovo il controllo del browser Web dal modulo, viene generato l'evento di caricamento.

Non capisco questo un po ', come può un controllo impedire un metodo che lo utilizza da sparare in primo luogo?

Passando, ho trovato questo: http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/d6e427b2-9cc9-4318-bb05-11363025e3f7/

TL; DR per il link è il seguente: "Load non funziona se si dispone di un browser web sulla forma che è impostato per Visible = true"

Quindi, sicuramente, se cambio la visibilità predefinita del browser su false, viene generato l'evento di caricamento del controllo. Posso aggirare il problema impostando la visibilità del browser nell'evento di caricamento.

private void TVHost_Load(object sender, EventArgs e) 
{ 
    webBrowser1.Visible = true; 
    webBrowser1.Navigate("http://google.co.uk"); 
} 

Molto strano.

Mentre questa "correzione" funziona, la trovo incredibilmente hacky e mi chiedevo se qualcuno ha qualche spiegazione per questo comportamento?

Sorprendentemente ho trovato questo bug in MS Connect, rimasto 2005-http://connect.microsoft.com/VisualStudio/feedback/details/116535/when-adding-a-webbrowser-control-to-a-user-control-the-load-will-not-fire#

+0

Controllare questo http://stackoverflow.com/questions/2220483/usercontrol-load-event-not-fired – V4Vendetta

+0

Provato che @ V4Vendetta, non ha funzionato neanche. Grazie comunque. – KingCronus

+0

Un po 'più Googling mi ha portato a trovare molti riferimenti a questo bug, non vedo correzioni migliori di quelle attuali di impostarlo su invisibile prima. * sadface * – KingCronus

risposta

3

Dalla discussione in Connect bug si è collegato a:

Per ora, se si desidera ottenere il carico evento da attivare, è possibile impostare la proprietà URL del controllo WebBrowser nella griglia delle proprietà. L'URL può essere qualsiasi cosa tu voglia, anche su: vuoto se non vuoi che inizi con una pagina caricata.

Quindi, se si va in progettista e impostare Url proprietà s' il WebBrowser alla stringa about:blank (che dice al WebBrowser per caricare una pagina vuota), quindi il controllo utente dovrebbe iniziare a ricevere di nuovo il suo evento Load.

+0

Grazie mille per: blank ha fatto il trucco. – KingCronus