Zugriff auf Frnktionen von dynamisch erzeugten UserControls

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Eggord.

    Zugriff auf Frnktionen von dynamisch erzeugten UserControls

    Hi

    ich habe da ein Problem: Ich lade dynamisch UserControls in ein Panel. Je nach Auswahl des Users ändert sich das geladene UserControl. Die UserControl haben nun Funktionen. Wie kann ich nun von der Form oder von einem Modul auf die Funktionen der dynamischen UserControls zugreifen?

    Bisher habe ich das geladene UserControl in einem Property gespeichert:

    VB.NET-Quellcode

    1. Dim m_Eigenschaften As Control
    2. Public Property Eigenschaften() As Control
    3. Get
    4. Return m_Eigenschaften
    5. End Get
    6. Set(ByVal value As Control)
    7. m_Eigenschaften = value
    8. End Set
    9. End Property


    dann konnte ich in der Form auf das UserControl zugreifen:

    VB.NET-Quellcode

    1. Eigenschaften.Visible = False


    ich kann also nur auf die Properties von Controls zugreifen. Jetzt könnte man natürlich ein übergeordnetes UserControl erstellen von dem alle UserControls erben und die als Control für die Eigenschaften setzten. Dann hätte man auf die Funktionen die abei allen UserControls gleich sind schonmal zugriff. Aber ich brauche auch unterschiedliche Funktionen zugriff.

    Kann man vll die Properties overloaden. Somit hat man den selben namen allerdings für jedes UserControl ein property.
    Sieh Dir mal dieses PlugIn-System-Tut an.
    Vllt. kannst Du die Controls ja als PlugIn laden.
    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!
    Wenn du auf spezielle Funktionen/Eigenschaften/Subs der einzelnen Controls zugreifen willst, die nicht alle gemeinsam haben, würde ich auf dessen Typ prüfen:

    VB.NET-Quellcode

    1. If TypeOf m_Eigenschaften is Automobil then
    2. dim myAutomobil as Automobil = directcast(m_Eigenschaften, Automobil)
    3. myAutomobil.FahreLos()
    4. end if

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

    Danke Enixmus...das müsste gehen!

    Mal eine andere Frage. Wie geht es aders rum? von userControl auf ein Control in der Form bzw. in einem TableLayout zugreifen? Über parent kann ich wieder so sachen wie visible ändern. ich möchte aber auf ein lable zugreifen. Mit einem Event sollte es gehen aber kann ich auch direkt drauf zugreifen?
    Das geht nur, wenn sich das Control in Deinem Projekt befindet.
    Diese Lösung ist unsauber, verwende ein Event.
    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!