Events richtig nutzen

17/11/2008 - 08:57 von Thomas Hübner | Report spam
Hi NG,

Ich habe eine Klasse "Container". Eine Weitere Klasse "Elements" Die
Klasse Container enthàlt eine List(of Elements). Elements hat eine
Methode "Parse". (Aufgerufen über Container.List(0).Parse(Message) Diese
Methode soll Situationsabhàngig ein Event auslösen nachdem Sie
abgearbeitet wurde. Des weiteren gibt es eine "Form1" in der der Handler
für das Event liegen soll

"Container" wird in mainModule "Sub Main" Public Withevents instanziert.

Wie bekomme ich das Event aus dem Element in der List(of) des Containers
über das mainModule in die Form1. Es gibt auf Form1 keine Instanz von
Container.

Am sinnvollsten wàre hier glaube ich die AddHandler Methode in jedem
"Element" da es n Elemente gibt aber nur einen Handler gibt.

Adress of Form1.EventHandler funktioniert nicht (...wurde nicht auf eine
Objektinstanz festgelegt...)

Gruß,
Thomas
 

Lesen sie die antworten

#1 Karsten Sosna
17/11/2008 - 10:30 | Warnen spam
Ich habe eine Klasse "Container". Eine Weitere Klasse "Elements" Die
Klasse Container enthàlt eine List(of Elements). Elements hat eine Methode
"Parse". (Aufgerufen über Container.List(0).Parse(Message) Diese Methode
soll Situationsabhàngig ein Event auslösen nachdem Sie abgearbeitet wurde.
Des weiteren gibt es eine "Form1" in der der Handler für das Event liegen
soll

"Container" wird in mainModule "Sub Main" Public Withevents instanziert.

Wie bekomme ich das Event aus dem Element in der List(of) des Containers
über das mainModule in die Form1. Es gibt auf Form1 keine Instanz von
Container.

Am sinnvollsten wàre hier glaube ich die AddHandler Methode in jedem
"Element" da es n Elemente gibt aber nur einen Handler gibt.

Adress of Form1.EventHandler funktioniert nicht (...wurde nicht auf eine
Objektinstanz festgelegt...)



Hallo Thomas,
vielleicht so:
\\\
Public Class Form4

Private Cont As New Container

Private Sub Form4_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load

Dim element1 As New Element
element1.Name = "Element1"
AddHandler element1.Parsed, AddressOf Parsed
Cont.Elements.Add(element1)

Dim element2 As New Element
element2.Name = "Element2"
AddHandler element2.Parsed, AddressOf Parsed
Cont.Elements.Add(element2)

Dim element3 As New Element
element3.Name = "Element3"
AddHandler element3.Parsed, AddressOf Parsed
Cont.Elements.Add(element3)

Cont.Elements(0).Parse()
Cont.Elements(1).Parse()
Cont.Elements(2).Parse()

Console.WriteLine("Swap Element1 and Element3")
Dim tmp = Cont.Elements(0)
Cont.Elements(0) = Cont.Elements(2)
Cont.Elements(2) = tmp

Cont.Elements(0).Parse()
Cont.Elements(1).Parse()
Cont.Elements(2).Parse()
End Sub

Public Sub Parsed(ByVal sender As Object, ByVal args As
System.EventArgs)
If TypeOf (sender) Is Element Then
Console.WriteLine(DirectCast(sender, Element).Name)
End If
End Sub
End Class

Public Class Container
Public Elements As New List(Of Element)
End Class

Public Class Element
Public Name As String
Public Event Parsed(ByVal sender As Object, ByVal args As
System.EventArgs)

Public Sub Parse()
RaiseEvent Parsed(Me, Nothing)
End Sub
End Class
///
Wenn Du ein Element entfernst solltest Du vorab auch den Handler entfernen
siehe RemoveHandler.
Gruß Scotty

Ähnliche fragen