UserControl-Elemente mit Form kompatibel machen

  • VB.NET
  • .NET 5–6

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von Haudruferzappeltnoch.

    Haudruferzappeltnoch schrieb:

    Aber der Punkt ist die Erweiterbarkeit. Es ist nicht unwahrscheinlich das irgendwann mal eins dazukommt.
    Genau.
    Da bist Du mit einer gemeinsamen Basisklasse oder nem Interface auf der sicheren Seite.
    Bei meinen Settings-Dialogen haben ich über 10 Tabs, die ich über ein Interface anspreche.
    Zentralere Punkt ist dann eine Schleife, die automatisch alle diese Interfaces "einsammelt" und in einer List(Of T) ablegt.
    Die alle dann anzusprechen ist dann nur ein For Each-Dreizeiler.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja jetzt hab ich es schön aufgeräumt hinbekommen:

    VB.NET-Quellcode

    1. Friend Class OverviewForm
    2. Private CheckUp As CheckUpClass
    3. Sub New(CU As CheckUpClass)
    4. InitializeComponent()
    5. CheckUp = CU
    6. End Sub
    7. Private Sub OverviewForm_Load(sender As Object, e As EventArgs) Handles Me.Load
    8. Aktualisieren()
    9. End Sub
    10. Private Sub OverviewForm_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
    11. Dispose()
    12. End Sub
    13. Friend Sub Aktualisieren(CU As CheckUpClass)
    14. CheckUp = CU
    15. Aktualisieren()
    16. End Sub
    17. Friend Sub Aktualisieren()
    18. UC1.Aktualisieren(CheckUp)
    19. UC2.Aktualisieren(CheckUp)
    20. End Sub
    21. End Class
    22. '---------------------
    23. Friend Class UCAnzeige
    24. Implements IUpdatable
    25. Friend Sub Aktualisieren(CheckUp As CheckUpClass) Implements IUpdatable.Aktualisieren
    26. ''
    27. End Sub
    28. Private Sub Panel1_Click(sender As Object, e As EventArgs) Handles pnAnzeige.Click
    29. ''
    30. End Sub
    31. End Class
    32. '---------------------
    33. Friend Class UCPrinter
    34. Implements IUpdatable
    35. Friend Sub Aktualisieren(CheckUp As CheckUpClass) Implements IUpdatable.Aktualisieren
    36. ''
    37. End Sub
    38. Private Sub pnPrinter_Click(sender As Object, e As EventArgs) Handles pnPrinter.Click
    39. ''
    40. End Sub
    41. End Class


    Ich habe auch eine Schnittstelle dazu definiert:

    VB.NET-Quellcode

    1. Friend Interface IUpdatable
    2. Sub Aktualisieren(CheckUp As CheckUpClass)
    3. End Interface


    Wenn ich diese implementiere ist die Schleife so zu formulieren? Funktionieren tuts

    VB.NET-Quellcode

    1. Friend Sub Aktualisieren()
    2. For each UC in Me.Controls.OfType(Of IUpdatable)
    3. UC.Aktualisieren(CheckUp)
    4. Next
    5. End Sub


    Wirken sich Control Zusammenfassungen auch auf die Anzeige im FormDesigner aus? Denn gerade beim Neukompilieren, damit er ein neues UC erzeugt, hat er ein paar Anzeige Probleme. Beim zweiten Mal kompilieren kriegt ers dann hin.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Du musst schon in der IUpdatable-Schleife noch den Parameter hinzufügen und natürlich alle UCs das Interface implementieren lassen. Aber wenn Du schon IUpdatable schreibst, kannst Du die Sub auch Update nennen.
    Was meinst Du mit Controlzusammenfassungen? Klar, Du musst erstmal das Teil kompilieren, damit der Designer Dein aktualisiertes UC kennt. Aber werd mal konkret oder lad ein Testprojekt hoch, bei dem es Kompilierprobleme gibt.
    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.
    Aber es ist doch Post 16. Nur mit Schnittstelle damit die Schleife geht.

    Habs oben nochmal aktualisiert, war etwas früh kopiert.

    @VaporiZed
    Ich glaube es liegt allgemein an meiner Studio Performance und nicht am Projekt, wenn ich z.B. einen Verweis auf ein Namespace entferne, dann zeigt mir die IDE auch keine Fehler an, aber ich kann nicht mehr kompilieren. Wenn ich das Studio neustarte dann sehe ich alle Fehler wieder wei gewohnt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Haudruferzappeltnoch schrieb:

    Aber es ist doch Post 16. Nur mit Schnittstelle damit die Schleife geht.
    naja - post#16 ist halt ohne Schnittstelle - muss daher ohne die schöne Schleife auskommen.
    Geschmacksache, ob man findet, dasses das Wert ist.
    Bzw. kommt drauf an, wieviele UserControls damit zu beglücken sind - bei nur zwei oder drei fände ich das überkandidelt.
    Aber was eiglich viel wichtiger ist: Du hast verstanden, wie man sowas aufziehen kann :thumbup: