Alle Handler eines UserControls beim schließen im ParentForm entfernen

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Alle Handler eines UserControls beim schließen im ParentForm entfernen

    Hallo,
    ich habe ein Form, welches zur Laufzeit ein UserControl öffnet und dabei verschiedene Events dieses UserControls abonniert per:

    VB.NET-Quellcode

    1. AddHandler NewUserControl.evt_1, AddressOf fct_1
    2. AddHandler NewUserControl.evt_2, AddressOf fct_2
    3. AddHandler NewUserControl.evt_3, AddressOf fct_3

    Schließe ich dieses UserControl vom Form aus wieder, rufe ich bisweilen immer die zugehörigen

    VB.NET-Quellcode

    1. RemoveHandler NewUserControl.evt_1, AddressOf fct_1
    2. RemoveHandler NewUserControl.evt_2, AddressOf fct_2
    3. RemoveHandler NewUserControl.evt_3, AddressOf fct_3

    auf.

    Gibt es nicht einen pauschalen Aufruf, mit dem ich, wenn das UserControl geschlossen wird im ParentForm einfach alle Handler entfernen kann, die zu diesem UserControl gehören?
    Nö, musste Dir selber basteln. Hab ich irgendwo bei mir in meinen Bibliotheken stehen. Ich hatte das mit Reflection gelöst, Stichwort EventInfo.AddEventHandler und EventInfo.RemoveEventHandler. Man muss dann zum Anfang sowas wie AddHandler NewUserControl.evt_1, AddressOf fct_1 für jedes Event in Kompliziert schreiben, aber zum Ende reicht dann bei mir ein einziger Aufruf meiner DeactivateAllEventHandlers()-Methode und fertig. Das liegt daran, dass ich alle Infos in einer List(Of T) drin hab und somit alle EventHandler in einem Aufwasch erreichen kann.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    roepke schrieb:

    Gibt es nicht einen pauschalen Aufruf, mit dem ich, wenn das UserControl geschlossen wird im ParentForm einfach alle Handler entfernen kann, die zu diesem UserControl gehören?
    Na, es gibt einen Trick, der auf dein Problem vielleicht(!) anwendbar ist:

    mach dir eine WithEvents-Variable von dem Ucl, und deine Handler-Methoden statteste mit der Handles-Klauseln aus, statt das mit addHandler zu organisieren.
    Wenn du nun der WE-Variable ein UserControl zuweist, werden im Hintergrund automatisch alle Handles-Klausel-Events angebunden.
    Setzst du die WE-Variable auf Nothing wird automatisch komplett de-abonniert.

    Ich mag dieses Feature sehr gerne, weil dassis zuverlässig, und sichert auch dagegen, dass man aus Versehen ein Event mehrfach abonniert.