Event wird einmal geraised, aber mehrfach behandelt.

  • VB.NET
  • .NET (FX) 4.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von sothere.

    Event wird einmal geraised, aber mehrfach behandelt.

    Hallöchen alle miteinander:
    Ich habe gerade ein komisches Problem: Ich habe eine Klasse erstellt, in der eigentlich nur eine Liste hinterlegt ist und ein Event geraised wird, wenn ein Element hinzugefügt wird. Aber aus irgend einem Grund wird das Event, wenn ich es in einer anderen Classe behandle, dann immer so oft ausgelöst, wie Elemente in der Liste sind, Hat da jemand eine Idee woran das liegen könnte?

    VB.NET-Quellcode

    1. Private Shared liste As New List(Of Block)
    2. Public Shared ReadOnly Property BlockList As List(Of Block)
    3. Get
    4. Return liste
    5. End Get
    6. End Property
    7. Public Shared Event MessageAdded()
    8. Public Shared Sub Add(ByVal _Block As Block)
    9. liste.Add(_Block)
    10. RaiseEvent MessageAdded()
    11. End Sub


    VB.NET-Quellcode

    1. Private Sub test()
    2. Debug.WriteLine("BB")
    3. End Sub
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Dim asd As New Block
    6. asd.Text = "Test"
    7. asd.Root = 17
    8. asd.Base = 2
    9. asd.Node = New Node(MainNodeInfo)
    10. Notify.Add(asd)
    11. AddHandler Notify.MessageAdded, AddressOf test
    12. End Sub


    Ich glaub, das da irgendwas an der Konzeption nicht hinhaut, aber mir fällt gerade nicht ein, was das sein könnte.
    Liebe Grüße
    sothere
    Hey,

    Dein Fehler liegt in Deinem 2. Codeblock, Zeile 13. Du "verdrahtest" bei jedem Klick erneut. Es reicht 1x.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private WithEvents _messages As New MessageList()
    3. Private Sub _messages_MessageAdded(sender As Object, e As EventArgs) Handles _messages.MessageAdded
    4. MessageBox.Show("Message added.")
    5. End Sub
    6. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    7. _messages.AddMessage("huhu")
    8. End Sub
    9. End Class
    10. Public Class MessageList
    11. Private _messages As New List(Of String)
    12. Public ReadOnly Property Messages As List(Of String)
    13. Get
    14. Return _messages
    15. End Get
    16. End Property
    17. Public Event MessageAdded As EventHandler
    18. Public Sub AddMessage(message As String)
    19. _messages.Add(message)
    20. OnMessageAdded()
    21. End Sub
    22. Protected Overridable Sub OnMessageAdded()
    23. RaiseEvent MessageAdded(Me, EventArgs.Empty)
    24. End Sub
    25. End Class


    Oder "verdrahte" im Konstruktor der Form.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o