Habe ein Problem mit einem Code!

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von vbfreak19.

    Habe ein Problem mit einem Code!

    Hallo Leute!
    Habe ein Problem mit diesem Code:

    VB.NET-Quellcode

    1. Public Class CustomBrowser
    2. Inherits WebBrowser
    3. Private Sub WebBrowser1_NewWindow(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Me.newwindow
    4. e.Cancel = True
    5. CType(TabControl1 '<- Hier ist der Fehler! .SelectedTab.Controls.Item(0), WebBrowser).Navigate(e)
    6. End Sub
    7. End Class

    ich habe das in die Form1 hinein geschrieben. Damit wollte ich verursachen das sich die Internetseiten nicht im IE öffnen!
    Fehlermeldung: Fehler 1 Der Verweis auf einen nicht freigegebenen Member erfordert einen Objektverweis.
    Danke im Vorraus

    VB.NET-Quellcode

    1. Public Class CustomBrowser
    2. Inherits WebBrowser
    3. Private Sub WebBrowser1_NewWindow(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Me.newwindow
    4. CType(TabControl1.SelectedTab.Controls.Item(0), Webbrowser).Navigate(Webbrowser1.url.absoluteuri)
    5. e.Cancel = True
    6. End Sub
    7. End Class


    Gruß, Gugi :thumbup:
    ich habe eine Tabcontrol mit dem namen Tabcontrol1 EDIT:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form_load()
    3. usw...
    4. Public Class CustomBrowser
    5. Inherits WebBrowser
    6. Private Sub WebBrowser1_NewWindow(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Me.newwindow
    7. CType([u]TabControl1[/u] <- Unterstrichen mit der Fehlermeldung: Fehler 1 Der Verweis auf einen nicht freigegebenen Member erfordert einen Objektverweis.
    8. .SelectedTab.Controls.Item(0), WebBrowser).Navigate(CType(TabControl1.SelectedTab.Controls.Item(0), WebBrowser).Url.AbsoluteUri)
    9. e.Cancel = True
    10. End Sub
    11. End Class
    12. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „vbfreak19“ ()

    hmm, Du hast also eine Klasse CustomBrowser die von WebBrowser erbt, und die Du vermutlich in Deinen Tabs dynamisch erzeugst ?

    Jedenfalls kannst Du nicht innerhalb einer Klasse (ohne Instanz) plötzlich ein Event einer anderen Instanz behandeln: entweder Du behandelst das Event innerhalb der Klasse indem Du z.B. das neue Window nur unterdrückst

    VB.NET-Quellcode

    1. Private Sub NewWindow(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Me.newwindow
    2. e.Cancel = True
    3. End Sub

    oder ausserhalb der Klasse , indem Du einen EventHandler auf das Ereignis CustomBrowser1.NewWindow setzt oder per

    VB.NET-Quellcode

    1. Sub CustomBrowser1(...) handles CustomBrowser1.NewWindow
    2. ' Dein Code
    3. End Sub

    abfängst. Bei dynamisch erzeugten Klassen wie bei mehreren Tabs üblich wirst Du wohl um die EventHandler Methode nicht herumkommen.
    Mein Fehler, aber machs so:

    VB.NET-Quellcode

    1. Class CustomBrowser
    2. Inherits WebBrowser
    3. Sub NewWindowOpen(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Me.NewWindow
    4. e.Cancel = True
    5. End Sub
    6. End Class
    in der NewWindowOpen Methode(bei Kangaroo's Code) rufst du nur noch ein Event auf, an welches du auch die URL übergibst, auf dieses Event reagierst du dann und öffnest einen neuen Tab...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    vbfreak19 schrieb:

    Danke erstmal!!! Es funtioniert so. Aber bis jetzt öffnet sich nichts mehr im IE, aber es soll dann sich in einer neuen Tab öffnen

    Schau, Deine Klasse CustomBrowser weiss nichts und soll ja auch nichts über ihre Umgebung ( hier Deine Form und Tabs) wissen. Du kannst ihr zwar sagen sie soll beim Navigieren kein neues Fenster öffnen , aber nicht dass sie ausserhalb ihrer Umgebung etwas tun soll.

    Also deklariere Deinen CustomBrowser innerhalb Deiner Form mit "Dim WithEvents" und fang das NewWindow-Event dort ab. Die Form kennt das TabControl1 und kann auch neue Tabs anlegen. Erzeugst Du pro Tab dynamisch eine neue Instanz Deines CustomBrowsers musst Du ihm einen EventHandler zuweisen.