Rubrik: Controls · Sonstiges | VB-Versionen: VB4, VB5, VB6 | 14.02.02 |
WebBrowser-Control einfach weg? Eines der wohl seltsamsten VB-Bugs - nach dem Anzeigen einer URL verschwindet das WebBrowser-Control von der Form! | ||
Autor: Dieter Otter | Bewertung: | Views: 21.300 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Wie lässt sich am einfachsten und am schnellsten eine Webseite in der eigenen Anwendung laden und anzeigen? Natürlich mit dem Microsoft WebBrowser-Control. Man plaziere dieses auf die Form und per Navigate-Methode lädt man die darzustellende Webseite.
Und jetzt kommt's!
Die Webseite, die geladen und angezeigt wird, enthält ein kleines JavaScript, welches versucht das aktuelle Browser-Fenster zu schliessen. Im Normalfall erhalten Sie hier eine entsprechende MsgBox mit dem Hinweis: "Die angezeigte Seite versucht, das Fenster zu schließen. Soll das Fenster geschlossen werden?". Zur Auswahl stehen "JA" und "NEIN". Wenn Sie nun auf "JA" klicken, was meinen Sie was passiert? Das WebBrowser-Control wird vollständig von Ihrer Form gelöscht und steht für den weiteren Programmablauf nicht mehr zur Verfügung. Was jetzt kommt? Klar, Fehler über Fehler, da Sie per Code versuchen auf die Eigenschaften und Methoden des WebBrowser-Controls zuzugreifen, dieses aber gar nicht mehr existsiert!
Sie glauben das nicht? Probieren Sie es aus!
Nehmen Sie eine Form, fügen Sie über Projekt - Komponenten das WebBrowser-Control hinzu (Microsoft Internet Controls) und plazieren dieses auf die Form. Jetzt noch einen CommandButton und folgenden Code:
' URL laden und anzeigen Private Sub Command1_Click() WebBrowser1.Navigate "http://www.gizeh-online.de/" End Sub
Starten Sie das Projekt, klicken auf den Button und es erscheint obiges Meldungsfenster mit der Frage, ob das Fenster geschlossen werden soll. Beantworten Sie die Frage mit "JA" - und schwups - das WebBrowser-Control ist weg - einfach verschwunden
Jetzt könnten Sie sich und natürlich den Anwendern Ihres Programms sagen: "Wenn solch eine Meldung kommt, bitte bitte nicht "JA" als Antwort wählen...
...oder Sie verhindern das ganze per Code
Keine MsgBox - kein verschwundenes WebBrowser-Controls
Wenn man sich einmal die Ereigniss-Prozeduren des WebBrowser-Controls näher anschaut, findet man u.a. das Ereignis WebBrowser1_WindowClosing. Dieses Ereignis wird immer dann ausgelöst, wenn eine Webseite versucht das Browser-Fenster zu schliessen. Setzt man nun den Parameter Cancel auf den Wert True, so erscheint weder eine MsgBox mit dem obigen Hinweis, noch wird das WebBrowser-Control von der Form gelöscht.
Private Sub WebBrowser1_WindowClosing( _ ByVal IsChildWindow As Boolean, Cancel As Boolean) ' Hier wird verhindert, dass das Control von der ' Form gelöscht wird! Cancel = True End Sub
Es ist schon manchmal eigenartig, was Einem im Laufe seiner VB-Programmier-Karriere so alles widerfährt