Webbrower mit mehreren Tabs Progress

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Webbrower mit mehreren Tabs Progress

    Hallo zusammen.

    Ich habe das Problem, dass ich einen Webbrowser mit mehreren Tabs programmieren möchte. Das funktioniert soweit auch wunderbar. Da ich aber mehrere Tabs habe, erstelle ich die Webbowser Steuerelemente erst zur Laufzeit. Dabei gibts aber ein Problem mit dem ProgressChanged Event.

    mein Code:

    VB.NET-Quellcode

    1. AddHandler browser.ProgressChanged, New WebBrowserProgressChangedEventArgs(AddressOf Browser_Progress)
    2. End Sub
    3. Private Sub Browser_Progress(ByVal sender As Object, ByVal e As Windows.Forms.WebBrowserProgressChangedEventArgs)
    4. End Sub


    Das Event wird in der Funktion ausgelöst, dass einen neuen Tab erstellt.

    Aber ich habe hier schon einen Syntaxfehler. Ich bin noch nicht so ganz hinter gestiegen wie das mit den Event läuft.

    Fehlermelung:
    Für den Parameter "maximumProgress" von "Public Sub New(currentProgress As Long, maximumProgress As Long)" wurde kein Argument angegeben.
    Der Ausdruck "AddressOf" kann nicht in "Long" umgewandelt werden, da "Long" kein Delegattyp ist.

    Ich hoffe das kann mir jemand verständlich erklären
    schon

    VB.NET-Quellcode

    1. New WebBrowserProgressChangedEventArgs(AddressOf Browser_Progress)
    kompiliert nicht. Es gibt sicher keine Sub New, die eine Funktions-Addresse als Argument akzeptiert.

    VB.NET-Quellcode

    1. AddHandler browser.ProgressChanged, New WebBrowserProgressChangedEventArgs(AddressOf Browser_Progress)
    kompiliert also noch weniger, denn hier versuchst du mit AddHandler nicht einen Handler zu adden, sondern ein EventArgs.

    Ein EventArgs ist aber kein geeigneter Handler, sondern EventArgs sind ja die Daten, mit denen das Event später den Handler aufrufen will.

    EventArgs haben in einer AddHandler-Zeile einfach nix verloren - wie bist du auf diese Wirrsal gekommen?
    Das verstehe ich nicht ganz denn

    VB.NET-Quellcode

    1. AddHandler browser.DocumentTitleChanged, New EventHandler(AddressOf BrowserDocumentTitle_Changed)
    2. Public Sub BrowserDocument_Completed(ByVal sender As Object, ByVal e As EventArgs)
    3. End sub


    kompliert sehr wohl.

    Es mag sicherlich sein, dass es dennoch falsch ist. Hilfreich wäre dann eine Erklärung, wie man es richtig macht.


    Was ich da auch überhaupt nicht verstehe ist, die Fehlermeldung. Denn den Inhalt der Variablen currentProgress / maximumProgress ist ja das was ich haben will. Ich habe auch schon in einer sepperaten Form ein Webbrowsercontrol eingefügt umd mir das Event mal anzusehen das da erstellt werden soll. Aber da ist auch mirgendwo ein currentProgress / maximumProgress angegeben.

    VB.NET-Quellcode

    1. AddHandler browser.DocumentTitleChanged, New EventHandler(AddressOf BrowserDocumentTitle_Changed)
    Jo, das kompiliert, und zwar aus genau den zwei Gründen, aus denen das annere nicht kompiliert :D
    1. Für die EventHandler-"Klasse" gibt es eine Sub New, die eine FunktionsAddresse akzeptiert (wasses für WebBrowserEventArgs ja nicht gibt)
      EventHandler und EventArgs sind fundamental verschiedenes: Ein Handler ist ein Delegat, der vom Event aufgerufen wird, und ein EventArgs ist ein DatenPaket, welches das Event mitschickt, wenns den Handler aufruft.
    2. Ein EventHandler ist ein geeigneter Handler, und kann mit AddHandler an das Event gehängt werden.


    Hastes mal probiert, und gehts, oder nicht?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Super! :thumbsup:
    Ich war schon kurz davor, es vorzusagen.
    Eigenartig nur, dass man tatsächlich das
    "AddHandler browser.ProgressChanged, New WebBrowserProgressChangedEventHandler(AddressOf Browser_Progress)"
    schlicht weglassen kann, und die Kurzschreibe
    "AddHandler browser.ProgressChanged, AddressOf Browser_Progress"
    gültig ist.
    Das liegt an einer immanenten TypUmwandlung, die alle EventHandler-"Klassen" einprogrammiert haben.

    Weiteres zu Lesen: Alles über Events