2012-05-16 3 views
8

Diese stoßen können so unglaublich dumm, aber ich kann nicht herausfinden, wenn:C# Web Browser Control blockiert Eltern Load-Ereignis

  • Ich bin ein Idiot
  • ich etwas
  • Die MS Web Browser falsch verstanden Steuerung ist abgehört

Ich bevorzuge zu denken, dass es das letztere ist.

Ich habe ein Webbrowser-Steuerelement in einem WinForms-Benutzersteuerelement. Es wurde dem Steuerelement zur Entwurfszeit hinzugefügt, und theoretisch sollte es im Load-Ereignis des Steuerelements zu Google navigieren.

Scheint einfach.

Jedoch.

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

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

Dies funktioniert nicht. Kein Fehler, nur nichts. Das Einfügen einer Haltepunkt-/Debugzeile zeigt mir, dass das Load-Ereignis nicht einmal aufgerufen wird.

Ich entschied mich an dieser Stelle zu überprüfen, dass das Load-Ereignis in der Designer.cs-Datei korrekt festgelegt ist.

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

Scheint echt.

Wenn ich das Webbrowser-Steuerelement aus dem Formular entfernen, wird das Load-Ereignis ausgelöst.

Ich verstehe dieses eine Bit nicht, wie kann eine Kontrolle eine Methode verhindern, die sie von der Zündung überhaupt verwendet?

Umzug auf, fand ich diese: http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/d6e427b2-9cc9-4318-bb05-11363025e3f7/

TL; DR für den Link lautet wie folgt: „Laden wird nicht funktionieren, wenn Sie einen Web-Browser auf dem Formular haben, die auf Sichtbar gesetzt = true“

So sicher wie die Hölle, wenn ich die Standardsichtbarkeit des Webbrowsers auf false ändern, wird das Load-Ereignis des Steuerelements ausgelöst. Ich kann das Problem umgehen, indem ich die Sichtbarkeit des Browsers im Load-Ereignis festlege.

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

Sehr merkwürdig.

Während diese "Reparatur" funktioniert, finde ich es unglaublich hacky und fragte mich, ob jemand eine Erklärung für dieses Verhalten hat?

Erstaunlicherweise habe ich diesen Fehler in MS Connect, fand von 2005 übrig bleiben - http://connect.microsoft.com/VisualStudio/feedback/details/116535/when-adding-a-webbrowser-control-to-a-user-control-the-load-will-not-fire#

+0

Überprüfen Sie diese http://stackoverflow.com/questions/2220483/usercontrol-load-event-not-fired – V4Vendetta

+0

Versucht, dass @ V4Vendetta, auch nicht funktioniert. Danke trotzdem. – KingCronus

+0

Ein bisschen mehr Googeln hat dazu geführt, dass ich viele Verweise auf diesen Bug gefunden habe. Ich sehe keine besseren Fixes als meinen jetzigen, indem ich ihn zuerst auf "unsichtbar" setze. * sadface * – KingCronus

Antwort

3

Aus der Diskussion in der Connect bug Sie verknüpft:

Für jetzt, wenn Sie die Load erhalten möchten Zu auslösendes Ereignis können Sie die URL-Eigenschaft des WebBrowser-Steuerelements im Eigenschaftenraster festlegen. Die URL kann alles sein, was Sie wollen, sogar über: leer, wenn Sie nicht wollen, dass sie mit einer geladenen Seite beginnt.

Also, wenn Sie in die Designer gehen und stellen Sie die WebBrowser ‚s Url Eigenschaft auf den String about:blank (die die WebBrowser erzählen eine leere Seite laden), dann sollten Sie Ihre Benutzersteuerung beginnt wieder sein Load Ereignis zu bekommen.

+0

Vielen Dank, über: blank hat den Trick gemacht. – KingCronus