AddHandler für dynamische Controls

  • VB.NET
  • .NET (FX) 4.0

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von hate_regex.

    AddHandler für dynamische Controls

    Hallo :)

    Ich habe auf einer Form ein FlowLayoutPanel und füge diesem eine dynamische Anzahl an Webbrowsern hinzu:

    VB.NET-Quellcode

    1. Dim WebContainer As New WebBrowser
    2. With WebContainer
    3. .ScrollBarsEnabled = False
    4. .Size = New System.Drawing.Size(240, 430)
    5. .Location = New System.Drawing.Size(20, 20)
    6. .DocumentText = sHTML
    7. End With
    8. AddHandler WebContainer.Document.Click, New HtmlElementEventHandler(AddressOf WebContainer_Click)
    9. FlowLayoutPanel1.Controls.Add(WebContainer)


    Nun möchte ich gerne die ClickEvents (URL) der einzelnen Browser abfangen können, was mir nicht gelingt:

    VB.NET-Quellcode

    1. Private Sub WebContainer_Click(ByVal sender As Object, ByVal e As HtmlElementEventArgs)
    2. Console.WriteLine(e)
    3. End Sub


    in soweit Erfolg, dass nun das Event auslöst nur leider gibt mir der Parameter e nicht die URL zurück.

    Danke :)

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „hate_regex“ ()

    Tut mir leid hab die Frage überflogen! Dafür gibt es doch ein Event namens 'DocumentCompleted' da kannst du meines Wissen die Url abfangen

    Also Versuchs mal mit

    VB.NET-Quellcode

    1. Private Sub WebContainer_DocumentCompleted(ByVal sender As Object,ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)
    2. Console.WriteLine(e.url)
    3. End Sub
    4. AddHandler WebContainer.DocumentCompleted,AddressOf WebContainer_DocumentCompleted
    Arayni.setExperience(Experience.Beginner)
    Ich brauche ein ClickEvent.
    Im Beispiel von dir wirft das nach dem Laden der Seite ein "about:blank".
    Ich suche die URL eines angeklickten Links.

    Habs mit Navigated versucht, klappt leider auch nicht.

    VB.NET-Quellcode

    1. Private Sub WebContainer_Navigated(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserNavigatedEventArgs)
    2. MsgBox(e.Url.ToString)
    3. End Sub

    Ich möchte im Prinzip also das hier für die o.g. dynamisch angelegten Controls:

    VB.NET-Quellcode

    1. ​Private Sub WebBrowser1_Navigating(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserNavigatingEventArgs) Handles WebBrowser1.Navigating
    2. WriteLine(e.Url.ToString)
    3. End Sub


    Nur leider kann ich da so nicht verwenden, da ich die Controls nicht adressieren kann.

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

    hmm

    Es gibt noch

    VB.NET-Quellcode

    1. Private Sub WebBrowser1_Navigating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserNavigatingEventArgs) Handles WebBrowser1.Navigating
    2. MsgBox(e.Url.ToString)
    3. End Sub
    Arayni.setExperience(Experience.Beginner)
    Es funktioniert .. aber...
    Kann mir jemand erklären, warum das folgende funktioniert:

    VB.NET-Quellcode

    1. ​Dim WebContainer As New WebBrowser
    2. With WebContainer
    3. .ScrollBarsEnabled = False
    4. .Size = New System.Drawing.Size(240, 430)
    5. .Location = New System.Drawing.Size(20, 20)
    6. .DocumentText = sHTML
    7. End With
    8. AddHandler WebContainer.Navigating, AddressOf WebContainer_Navigating
    9. FlowLayoutPanel1.Controls.Add(WebContainer)


    VB.NET-Quellcode

    1. Private Sub WebContainer_Navigating(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserNavigatingEventArgs)
    2. WriteLine(e.Url.ToString)
    3. End Sub

    .. aber nur solange target="_blank" nicht vorkommt. Dann funktioniert es nicht mehr.
    Du kannst über den Parameter Sender im Click event das angeklickte Control abfragen und so auf die URL zugreifen.

    So mache ich das immer mit dynamisch erzeugten Controls. Kann dir nur leider jetzt kein Code Beispiel bringen, bin mit Handy online^^