aicher1998
Goto Top

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

Content-ID: 294508

Url: https://administrator.de/contentid/294508

Ausgedruckt am: 24.11.2024 um 22:11 Uhr

126919
126919 28.01.2016 aktualisiert um 19:32:49 Uhr
Goto Top
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
Goto Top
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
Goto Top
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
Goto Top
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
Goto Top
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.