Aktives MDI-Child erkennen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Mittels Me.ActiveMdiChild, wobei Me natürlich der MDI-Container ist.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Jo, da muss man nu Vererbungslehre und OOP verstehen.

    Welchen Datentyp hat Me.ActiveMdiChild? Es ist vom Datentyp Form.
    Jo, kannste gugge, in ObjectBrowser - die Klasse Form hat keine Property textbox1.

    Welchen Datentyp aber hat das konkrete Form, was du als MDIChild programmiert hast? Form1? ChildForm1? frmBlabla?
    Ich weiss es nicht - du musst die Frage verstehen, und mir beantworten, vorher kommste nicht weiter.

    Eine ganz sichere Methode, den genauen Datentyp des Objektes rauszukriegen, welches in Me.ActiveChild drinne ist, ist auch:

    VB.NET-Quellcode

    1. Messagebox.Show(Me.ActiveChild.Gettype().Name)


    In Me.ActiveMdiChild können also Objekte verschiedenen Datentyps drinne sein, Hauptsache, sie erben von Form.
    Andererseits weiss der Compiler nichts weiter über diese Objekte, ausser, dasses Forms sind (sie erben ja davon).
    Du musst also dem Compiler den konkreten Datentyp mitteilen - mittels eines Casts, damit er weiss, welche speziellen Properties dein Form hat:

    VB.NET-Quellcode

    1. DirectCast(Me.ActiveMdiChild, frmBlabla).textbox1.text
    Weil dein Form hat ja hofflich eine textbox1 - zumindest scheinst du das anzunehmen.
    @Selter98 Wenn alle Deine MDI-Childs eine gemeinsame Basisklasse oder ein gemeinsames Interface haben bzw. implementieren, kannst Du Me.ActiveMdiChild dahin casten und die gemeinsame Prozedur DO_ANY() aufrufen.
    DO_ANY() wäre dann die Prozedur, die in der Basisklasse implementiert oder im Interface deklariert ist.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!