Event - Raise Problem

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

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

    Event - Raise Problem

    Es geht um Folgenden Code, bei dem
    das Event "Changedd" nicht ausgelöst wird.
    Eventuell kann mir jemand sagen, warum das nicht funktioniert.


    VB.NET-Quellcode

    1. Module Module1
    2. Private Sub Test_Changedd(Sender As BaseClass) Handles Test.Changedd
    3. Throw New Exception("yeah")
    4. End Sub
    5. Private WithEvents Test As A
    6. Class A : Inherits BaseClass
    7. Public Event Changedd As EventHandlerEx(Of BaseClass)
    8. Public Delegate Sub EventHandlerEx(Of T0)(Sender As T0)
    9. Protected Sub OnTest(se As BaseClass)
    10. RaiseEvent Changedd(se)
    11. End Sub
    12. Private bbool As Boolean = False
    13. Public Property Lol As Boolean
    14. Get
    15. Return bbool
    16. End Get
    17. Set(value As Boolean)
    18. If value = bbool Then Exit Property
    19. bbool = value
    20. End Set
    21. End Property
    22. End Class
    23. Public Class BaseClass
    24. End Class
    25. Private Sub Doit()
    26. Test = New A()
    27. Test.Lol = True
    28. End Sub
    29. Sub Main()
    30. Doit()
    31. Console.ReadKey()
    32. End Sub
    33. End Module

    Daniel Baumert schrieb:

    warum das nicht funktioniert.
    Nimm keine Module, nimm Klassen.
    Events greifen auf Instanzen von Klassen.
    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!

    Daniel Baumert schrieb:

    Nope.
    Poste bitte mal Deinen überarbeiteten Code.
    Ansonsten so:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private WithEvents myTest As New Test
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. myTest.SendEvent("bla")
    5. End Sub
    6. Private Sub TestEventhandler(sender As Object, e As MyEventArgs) Handles myTest.MyEvent
    7. MessageBox.Show(e.MyText)
    8. End Sub
    9. End Class

    VB.NET-Quellcode

    1. Public Class Test
    2. Public Event MyEvent As EventHandler(Of MyEventArgs)
    3. Public Sub New()
    4. End Sub
    5. Public Sub SendEvent(txt As String)
    6. RaiseEvent MyEvent(Me, New MyEventArgs(txt))
    7. End Sub
    8. End Class
    9. Public Class MyEventArgs
    10. Inherits EventArgs
    11. Private _MyText As String
    12. Public ReadOnly Property MyText As String
    13. Get
    14. Return _MyText
    15. End Get
    16. End Property
    17. Public Sub New(txt As String)
    18. _MyText = txt
    19. End Sub
    20. 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!
    @Daniel Baumert

    RodFromGermany schrieb:

    Poste bitte mal Deinen überarbeiteten Code.
    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!

    Daniel Baumert schrieb:

    Es geht um Folgenden Code, bei dem
    das Event "Changedd" nicht ausgelöst wird.
    Eventuell kann mir jemand sagen, warum das nicht funktioniert.
    na, du musstes halt auslösen
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Module Module1
    2. Private Sub Test_Changedd(ByVal Sender As BaseClass) Handles Test.Changedd
    3. Throw New Exception("yeah")
    4. End Sub
    5. Private WithEvents Test As A
    6. Class A : Inherits BaseClass
    7. Public Event Changedd As EventHandlerEx(Of BaseClass)
    8. Public Delegate Sub EventHandlerEx(Of T0)(ByVal Sender As T0)
    9. Protected Sub OnTest(ByVal se As BaseClass)
    10. RaiseEvent Changedd(se)
    11. End Sub
    12. Private bbool As Boolean = False
    13. Public Property Lol As Boolean
    14. Get
    15. Return bbool
    16. End Get
    17. Set(ByVal value As Boolean)
    18. If value = bbool Then Exit Property
    19. bbool = value
    20. OnTest(Me)
    21. End Set
    22. End Property
    23. End Class
    24. Public Class BaseClass
    25. End Class
    26. Private Sub Doit()
    27. Test = New A()
    28. Test.Lol = True
    29. End Sub
    30. Sub Main()
    31. Doit()
    32. Console.ReadKey()
    33. End Sub
    34. End Module