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-Key: 294508

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

Printed on: April 27, 2024 at 03:04 o'clock

Mitglied: 126919
126919 Jan 28, 2016 updated at 18:32:49 (UTC)
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
Member: emeriks
Solution emeriks Jan 28, 2016, updated at Feb 01, 2016 at 11:04:36 (UTC)
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.
Member: Aicher1998
Aicher1998 Jan 28, 2016 at 18:41:48 (UTC)
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...
Member: Aicher1998
Aicher1998 Jan 28, 2016 at 18:45:53 (UTC)
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
Member: emeriks
emeriks Jan 29, 2016 at 08:23:05 (UTC)
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.