Klassenbibliothek - Events

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Sakeco.

    Klassenbibliothek - Events

    Hallo,

    ich habe eine Klassenbibliothek mit mehreren Unterklassen. Eine dieser Klassen liest bei der Instanzierung Daten aus einer XML-Datei. Danach wird ein Event ausgelöst. Nun möchte ich dieses Event natürlich gerne(in meinem Programm das die besagte Unterklasse nutzt) auswerten. Allerdings wird das Event anscheinend nie ausgelöst, obwohl die Daten erfolgreich ausgelesen wurden. Erst dachte ich, ich hätte einen Fehler im Code(bzw. in der Unterklasse), sodass das Event nich ausgelöst wird. Also habe ich der Unterklasse eine Prozedur(rRaiseEvent()) hinzugefügt, welche das Event auslöst. Ich löse nun das Event per Klick auf einen Button(bzw. über die Prozedur) manuell aus und siehe da: die lang ersehnte MessageBox erscheint.

    Nun meine Frage; gibt es eine Möglichkeit, dass ich ein Ereignis das die Unterklasse ausgelöst hat, in Hauptprogramm auswerten kann?
    wenn du die Unterklasse als Variable hast und als WithEvents deklarierst, kannst du dort ja das Event abfangen und nach oben weitergeben...bzw. mit AddHandler
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    @singu:

    Eine Fehlermeldung erscheint nicht, sonst hätte ich es vielleicht schon selber hinbekommen.

    Unterklasse(nur relevante Codeezeilen):

    VB.NET-Quellcode

    1. Public Event UpdateFound()
    2. (...)
    3. Public Class GetUpdate
    4. Public Sub New(ByVal XML_Url As String)
    5. Try
    6. sUpdateInformation = ReadXMLUpdateInfo(XML_Url)
    7. RaiseEvent UpdateFound() 'Ereignis wird ausgelöst
    8. Call rRaiseEvent() 'Prozedur wird ausgeführt
    9. Catch ex As Exception
    10. Throw New Exception("Informationen konnten nicht bezogen werden: " & vbNewLine & ex.Message)
    11. End Try
    12. End Sub
    13. Public Sub rRaiseEvent()
    14. RaiseEvent UpdateFound()
    15. End Sub
    16. End Class


    Hauptanwendung:

    VB.NET-Quellcode

    1. Imports YourUpdate
    2. Public Class frmMain
    3. Public WithEvents sUpdate As YourUpdate.GetUpdate
    4. Private Sub btnCheckForUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCheckForUpdate.Click
    5. lvProgress.Items.Add("Prüfe auf Update...")
    6. sUpdate = New YourUpdate.GetUpdate("http://www.sakeco.info/Update/YouLoad/Files.xml")
    7. AddHandler sUpdate.UpdateFound, AddressOf sUpdateFound
    8. (...)
    9. End Sub
    10. Private Sub sUpdateFound()
    11. MsgBox("Update wurde gefunden!")
    12. End Sub
    13. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    14. sUpdate.rRaiseEvent()
    15. 'Führt Prozedur aus --> Ereignis wird abgefangen
    16. End Sub
    17. End Class


    Wie gesagt, rufe ich die Prozedur über die Hauptanwendung auf funktioniert es, aber wenn ich sie über die Unterklasse aufrufe, pasiert gar nichts.
    Na von der Unterklasse soll es ausgelöst und von der Form abgefangen werden.

    [Edit]
    Habe es nun geschafft. Mein Fehler bestand darin, dass ich den Handler erst nach dem Event zugeordnet habe.

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