aicher1998

Events von übergeordneter Class ausführen lassen

Hallo,

Ich hab folgendes Problem:

Ich habe eine Class A, innerhalb dieser Class A gibt es eine Auflistung von Class B´s.
Ich werde in meiner Class Form1 die Class A einbauen mi WithEvents.
Jetzt mein Problem:
Die Class B ist innerhalb der Class A und wirft Events.
Ich möchte aber, dass wenn der Sub "EventAbfeuern" aufgerufen wird, dass dann der Event von der Class A geworfen wird. Ich weiß, dass ich irgendwie Delegates verwenden muss, aber ich versteh nicht genau wie...

Ich hoffe, ihr könnt mir helfen!

Hier ein Beispiel zur Veranschaulichung:

Public Class A
   Dim l as New List(Of B)


   <Serializable()> Public Class B
        Private Sub EventAbfeuern()
             
       End Sub
   End Class
End Class

Vielen Dank im Voraus!

Mit freundlichen Grüßen,
Chrisotpher
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 294508

Url: https://administrator.de/forum/events-von-uebergeordneter-class-ausfuehren-lassen-294508.html

Ausgedruckt am: 18.07.2025 um 04:07 Uhr

126919
126919 28.01.2016 aktualisiert um 19:32:49 Uhr
Hi there,
like this ?
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim cA As New A
    End Sub
End Class

Public Class A
    WithEvents mytest As New B
    Friend Shared Event eventA()

    Private Sub A_eventA() Handles Me.eventA
        MsgBox("EventA Fired")  
    End Sub

    Public Class B
        Private Event eventB()
        Public Sub New()
            RaiseEvent eventA()
        End Sub
    End Class
End Class

Flachkoepper
emeriks
Lösung emeriks 28.01.2016, aktualisiert am 01.02.2016 um 12:04:36 Uhr
Hi,
etwa so

Public Class A
   Dim l as New List(Of B)

   sub AddClassB
        dim CB as new ClassB
        AddHandler CB.ClassB_changed, AddressOff Child_ClassB_changed
        I.Add(CB)
   end sub

   sub Child_ClassB_changed(Sender as object, e as EventArgs)
      msgbox("Ein Element von I hat ClassB_changed ausgelöst.")  
   end sub


   <Serializable()> Public Class B
      Public Event ClassB_changed(Sender as object, e as EventArgs)
  
      Private Sub EventAbfeuern()
           RaiseEvent  ClassB_changed(Me, nothing)         
       End Sub
   End Class
End Class


E.
Aicher1998
Aicher1998 28.01.2016 um 19:41:48 Uhr
Danke für deine Mühe.

Das Problem ist ja, dass ich nicht einfach nur
 WithEvents mytest As New B 
hab, sondern, ich hab ja in der Class A ein
Dim l as New List(Of B) 
drin.

Also
Public Class Form1 
    Dim WithEvents cA As New A 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
        Dim cB As New A.B
        cA.Add(cB) 'Add hab ich gemacht um B an die Liste l zu übergeben  
       'Wenn jetzt ein Event aus einem der Elemente in der Liste l gefeuert wird, dann soll der Event bei cA ausgelöst werden.  
    End Sub 
End Class 

OK, hab das Problem jetzt gelöst mit einem AddHandler...
Aicher1998
Aicher1998 28.01.2016 um 19:45:53 Uhr
Zitat von @emeriks:

Hi,
etwa so

Vielen Dank.
Ich hab das Problem gerade eben genau auf diese Art gelöst, 2 Minuten vor deiner Antwort!
Jetzt bin ich aber stolz drauf, es genauso gemacht zu haben, wie ein Profi^^

RaiseEvent  ClassB_changed(Me, nothing) 
das Me st ja auch wichtig, damit die Klasse übergeben wird, die das Event ausgelöst hat.


Gruß Chris
emeriks
emeriks 29.01.2016 um 09:23:05 Uhr
das Me st ja auch wichtig, damit die Klasse übergeben wird, die das Event ausgelöst hat
Richtig.

Lösung markieren? Damit auch alle anderen gleich sehen, worauf Du Dich beziehst.