Event-Abfrage für alle Controls einer Klasse?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Phasenverschiebung.

    Event-Abfrage für alle Controls einer Klasse?

    Folgendes:
    Ich habe eine Nutzercontrol-Klasse, die ein Event auslösen kann. Nun habe ich auf meiner Form mehrere dieser Controls, bei denen dieses Event zentral verwaltet werden soll. Bei den 4 Controls löse ich das folgendermaßen.

    Private Sub MyControl1_1_SettingsChanged(sender As Object, e As System.EventArgs) Handles _
    MyControl1_1.SettingsChanged, MyControl1_2.SettingsChanged, MyControl1_3.SettingsChanged, MyControl1_4.SettingsChanged

    Call MachWasDamit(sender)

    End Sub


    Bei 4 controls ist das machbar, bei sehr vielen Controls wird es irgendwann sehr unhandlich...

    Gibt es eine Möglichkeit statt der Auflistung der Einzelcontrols im Handle so etwas wie "Alle Controls dieser Klasse" anzugeben?

    Gruß, P..
    Arbeite mit dynamischer Bindung statt mit statischer:
    AddHandler DeinControl.EventName, AddressOf DeineEventHandlerSub

    Das kannst Du dann z.B. in den Formular_Load-EventHandler einbauen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    OK, Danke funktioniert!

    zur Vollständigkeit hier noch der Code wie ichs realisiert habe:

    VB.NET-Quellcode

    1. Form_Load:
    2. For Each cnt As myctl In FindControlRecursive(allControls, Me, GetType(myctl))
    3. AddHandler cnt.myEvent, AddressOf EventmyEvent
    4. Next
    5. Private Sub EventmyEvent (ByVal sender As Object, ByVal e As EventArgs)
    6. Call DoCode(sender)
    7. End Sub
    8. Public Function FindControlRecursive(ByVal mylist As List(Of Control), ByVal myControl As Control, ByVal ctrlType As System.Type) As List(Of Control)
    9. If myControl Is Nothing Then Return mylist
    10. If myControl.GetType Is ctrlType Then
    11. mylist.Add(myControl)
    12. End If
    13. For Each myChildControl As Control In myControl.Controls
    14. FindControlRecursive(mylist, myChildControl, ctrlType)
    15. Next
    16. Return mylist
    17. End Function


    Gruß, P..