PDA

Vollständige Version anzeigen : MDI-Client FormClosed aus Mainform abfragen


Jörg Diekmann
21.01.2008, 11:23
Hallo Leutz,
ich hab ein Problem mit einer MDI-Anwendung unter VB.Net 2005.

Im Internet hab ich dazu leider keine Antwort gefunden; auch in sämtlichen Fachbüchern steht dazu nichts drin. Vielleicht kann mir hier jemand weiterhelfen?

Meiner MDI-Anwendung ist ein Splash-Screen vorgeschaltet. Danach startet das MainForm (Form1). Ich möchte nun im MainForm ein MDI-Child (Login) anzeigen, in dem Benutzername und kennwort abgefragt werden sollen. In Abhängigkeit von der validen/nicht validen Eingabe von Benutzername und Kennwort, soll das MDI Child (Login) geschlossen werden und Form1 angezeigt bzw. die Applikation geschlossen werden. Wenn die Eingabe von Benutzername und Kennwort korrekt war soll im Form1 ein Panel1.DockLeft angezeigt werden, bei fehlerhafter Eingabe wird die Anwendung beendet.

Wie kann ich aus dem Form1 abfragen ob die Form Login geschlossen wurde und wie kann ich erreichen, das das Panel im Form1 nur angezeigt wird, wenn Form Login nach erfolgreicher Benutzernamen/Kennworteingabe angezeigt wird.

Über eine Antwort würde ich mch sehr freuen.

Mit freundlicen Grüßen
Jörg Diekmann

corvusgravis
02.02.2008, 01:17
Hallo Jörg,

Erstelle im Hauptformular ein neues Objekt vom Typ LogIn-Formular und öffne das LogIn-Formular als modalen Dialog mittels ObjektName.ShowDialog().

Dann geht die Verarbeitung im Hauptformular erst weiter nachdem das LogIn-Formular geschlossen wurde.

Übergib dem LogIn-Formular beim Aufruf von ShowDialog() das Hauptformular mittels "owner"-Parameter. Schreib einfach "this" rein.

Im Hauptformular erstellst du eine Public (oder Friend) Eigenschaft auf die du vom LogIn-Formular dann Zugriff hast. Und zwar indem du im LogIn-Formular sowas wie this.owner.EigenschaftName schreibst.

Geht aber nicht so einfach:

Das LogIn-Formular bekommt zwar dein Hauptformular in der ObjrktVariablen "owner". Allerdings ist "owner" vom Typ "Form". Und die Klasse "Form" hat die oben erstellte Public (oder Friend) Eigenschaft EigenschaftName nicht.

Du mußt ein neues Objekt vom Typ Hauptformular erstellen. Dem weist du dann den Inhalt von "owner" zu.

Geht aber nicht so einfach:

Weil das ja unterschiedliche Datentypen sind mußt du das Formular "owner" umwandel und zwar mittels boxing (das ist das mit den Klammern in der zweiten Zeile):

ObjektVariableVomTypHauptformular Hauptformular;
ObjektVariableVomTypHauptformular = (Hauptformular)this.owner;

Jetzt hast du im LogIn-Formular über ObjektVariableVomTypHauptformular Zugriff auf das Huptformular und somit auf die Eigenschaft EigenschaftName:

ObjektVariableVomTypHauptformular.EigenschaftName = ...

Hilft dir das weiter?

Viel Erfolg,
Andreas

Jörg Diekmann
04.02.2008, 06:15
Hallo Andreas,

Danke für die Antwort. Ich denke ich komme damit klar. Allerdings habe ich auch eine alternative Lösung gefunden. Dabei setze ich ein Panel-Objekt im Form1 (MDI-ParentForm) ein, auf dem die Felder für die Kennwortabfrage drin sind. Bei erfolgreicher kennwortabfrage blende ich das Panel aus und starte ein neues MDI-Childform. Wäre dankbar, wenn du mir deine Meinung zu dieser Idee schreiben würdest.

Gruss aus Bochum
Jörg Diekmann

hcscherzer
04.02.2008, 08:01
Moin Jörg,
Du hattest zwar nicht mich um Meinung gefragt aber da ich mitgelesen habe: an sich ist das keine schlechte Idee mit dem Panel aber ich gebe folgendes zu bedenken: ein Anmeldedialog in einem extra Form ist problemlos von einer Applikation in eine andere zu übertragen und damit bist Du evtl. für die Zukunft besser gerüstet ...