C# Kommunikation zwischen MDI Hauptfenster und Child

Hallo ich habe ein Problem mit einem Windowsforms Projekt.

Ich habe ein MDI Hauptfenster von dem aus ich verschiedene Child Fenster öffnen kann. Das eine Fenster z.B. zeigt eine Tabelle mit Kunden an. Wenn ich jetzt einen Kunden öffnen möchte, soll mir das MDI Hauptfenster ein neues Child Fenster öffnen.

Zuerst habe ich versucht vom ersten Child Fenster auf das MDI Hauptfenster zuzugreifen und dann ein das neue Child Fenster zu öffnen. Bei der Recherche im Internet wie ich das mache bin ich aber auf viele Threads gestoßen, dass man das eigentlich nicht machen soll, dass man von einem Fenster auf Objekte des anderen zugreift.

Vorschläge mit Dialogfenstern funktionieren bei mir nicht, da ich ja MDI Fenster habe.

Vielleicht kann mir einer von euch einen Hinweis geben wie man soetwas in OOP sinnvoll realisiert.

Gruß prophion
 
Ich habe zwar lange nicht mehr mit C# gearbeitet, aber eine Idee hätte ich schon: Im Child ein Event auslösen, welches das Hauptfenster automatisch beim Erstellen abonniert.

mfg benediktibk
 
ich würde einen modellierungs ansatz wählen bei dem deine fenster gar keine derartige logik enthalten müssen ...

prinzipiell würde ich das mittels MVVM abbilden:

dein mdi parent hat ein zugehöriges view-model
jedes mdi child hat ein zugehöriges view-model
die viewmodel objekte dürfen sich untereinander kennen

das view-model des mdi parent enthält eine liste der view-modelle der mdi childs die gerade geöffnet sind

willst du ein neues child öffnen, fügst du dieser liste das entsprechende view-model hinzu, was auf dem view-model des mdi parent ein event auslöst, das vom view (also dem eigentlichen MDI parent) ausgewertet wird ... für das neu hinzu gekommene view-model wird dann ein neues MDI child erzeugt, welches an das neue view-model binden kann ...

deine views, sprich die einzelnen mdi fenster brauchen sich nicht wirklich zu kennen, und greifen auch nicht gegenseitig auf ihre controls zu ... die abhänigkeiten der view-modelle sind marginal ... wenn du auf eine factory setzt welche deine MDI childs erzeugt wenn man ihr ein passendes view-model übergibt, braucht dein mdi parent nichtmal wissen welche arten von mdi childs es überhaubt gibt ... das muss nur die factory wissen, und das kann auch dynamisch zur laufzeit festgelegt werden (bleistiftsweise durch attribute an den betreffenden klassen... "dieses mdi child stellt einen view-typ für den view-model-typ xyz dar" ... beim starten das eigene assembly oder ein dynamisch geladenes assembly auf entsprechende attribute prüfen, und ggf. bei der factory registrieren)
 
Zurück
Oben