Einen Event/Function in einer Klasse/Class aufrufen, die mich (eine Klasse) mit Inherits erbt?

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

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Einen Event/Function in einer Klasse/Class aufrufen, die mich (eine Klasse) mit Inherits erbt?

    Hallo,
    mal eine blöde Frage. Geht es dass ich eine simple Klasse habe, und in dieser Klasse aus einer "Sub" heraus, evtl einen Event auslöse, der in allen Klassen ist, die mich als Klasse vererbt haben?

    Ich meine, ich kann ja logischerweise die Subs aufrufen, deren Klasse ich erbe.
    Aber gibt es auch einen umgekehrten einfachen Weg?

    Also ich meine etwa so: Ich mache "Raisevent" in der Baseklasse. Alle Klassen die diese Baseklasse erben mittels "Inherits Baseklasse", in denen löst nun ein solcher Event aus? äh, oder so!

    Hinti schrieb:

    oder so
    So geht es nicht:

    VB.NET-Quellcode

    1. Public Class Basisklasse
    2. Public Event MyEvent(ByRef sender As Object, ByRef e As EventArgs)
    3. End Class
    4. Public Class Class1
    5. Inherits Basisklasse
    6. Public Sub DoIt()
    7. RaiseEvent MyEvent(Me, EventArgs.Empty)
    8. End Sub
    9. End Class

    So geht es:

    VB.NET-Quellcode

    1. Public Class Basisklasse
    2. Public Event MyEvent(ByRef sender As Object, ByRef e As EventArgs)
    3. Protected Sub RaiseMyEvent(ByRef sender As Object)
    4. RaiseEvent MyEvent(sender, EventArgs.Empty)
    5. End Sub
    6. End Class
    7. Public Class Class1
    8. Inherits Basisklasse
    9. Public Sub DoIt()
    10. RaiseMyEvent(Me)
    11. End Sub
    12. End Class
    Aufgerufen wird das so:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private WithEvents xxx As Class1
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. xxx = New Class1
    5. AddHandler xxx.MyEvent, AddressOf yyy
    6. xxx.DoIt()
    7. End Sub
    8. Private Sub yyy(ByRef sender As Object, ByRef e As EventArgs)
    9. MessageBox.Show("Event")
    10. End Sub
    11. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Mono schrieb:

    Erklär mal noch genauer was du willst. Willst du von einem Objekt ein Event in einem anderen Objekt auslösen?

    Hallo. Ich glaube RodFromGermany hats beantwortet, also wenn er mich verstanden hat. Muss ich mir aber erst anschauen. Danke an der Stelle.

    Jedenfalls möchte ich folgendes: Ich habe Klassen die vererben eine Basisklasse. Und diese Basisklasse hat eine Public "Reset" Function (Sub). Und wenn ich in der Basisklasse dieses "Reset" aufrufe, dann möchte ich gerne in allen Klassen die diese Basisklasse vererbt haben, ebenfalls eine dort integrierte "Eigene Funkion" ausführen.

    Vor diesem Posting habe ich es halt so gelöst, dass die Basisklasse ein globales Event auslöst. In dieses Event habe ich dann halt manuell den Call auf die Subklassen-Funktionen aufgerufen. Aber das gefällt mir nicht so gut und ist fehleranfällig. Insofern, weil ich halt keine sub-erstellte Klasse übersehen darf da reinzumachen.

    Hinti schrieb:

    eine dort integrierte "Eigene Funkion" ausführen
    Ist das die vollständige Funktionsbeschreibung?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das ist

    Hinti schrieb:

    erheblich
    für eine Effiziente Antwort.
    So was:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private WithEvents xxx As Class1
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. xxx = New Class1
    5. AddHandler xxx.MyEvent, AddressOf yyy
    6. xxx.DoIt()
    7. xxx.Init()
    8. End Sub
    9. Private Sub yyy(ByRef sender As Object, ByRef e As EventArgs)
    10. MessageBox.Show("Event")
    11. End Sub
    12. End Class
    13. Public MustInherit Class Basisklasse
    14. Public Event MyEvent(ByRef sender As Object, ByRef e As EventArgs)
    15. Protected Sub RaiseMyEvent(ByRef sender As Object)
    16. RaiseEvent MyEvent(sender, EventArgs.Empty)
    17. End Sub
    18. Public Sub Init()
    19. ' hier wird die Basisklasse initialisiert
    20. ' Aufruf zum Initialisieren der abgeleiteten Klassen
    21. InitIntern()
    22. End Sub
    23. Protected MustOverride Sub InitIntern()
    24. End Class
    25. Public Class Class1
    26. Inherits Basisklasse
    27. Public Sub DoIt()
    28. RaiseMyEvent(Me)
    29. End Sub
    30. Protected Overrides Sub InitIntern()
    31. ' hier wird die abgeleitete Klasse initialisiert
    32. End Sub
    33. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!