anderes mdi child aktivieren

DerStauner

Erfahrenes Mitglied
Abend!

ich habe eine mdi Anwendung, wo ich z. B. 2 child Form lade. Im Grundfall kann ich zwischen den beiden child forms nur so wechseln, wenn ich das titlebar anklicke. Wenn ich im Click Event beider child Form me.Activate schreibe, dann kann ich zwischen den beiden child Forms auch wechseln, wenn ich irgendwo auf dem anderen child Form klicke, aber nicht auf einem Control auf diesem Form. So, meine Frage: wie kann ich mittels einfachen Anklickens zwischen child forms wechseln, egal, wo ich geklickt habe?

Danke.
 
Hat irgendjemand eine Idee Oder haben ich etwas Schweres gefragt Ich glaube nicht, dass andere, die eine mdi-Anwendung aufbauen, mit diesem Problem noch nicht konfrontiert wurden.
 
Die einzige Idee die ich hätte wäre die ControlCollection von Form aus rekursiv zu durchlaufen und das Click Ereigniss zu setzen.

Sprich:
C#:
override void OnShown(EventArgs e)
{
   base.OnShown(e);

   SetClickEvent(this);
}

private void SetClickEvent(Control c)
{
    c.Click += new EventHandler(clickForm);

    foreach(Control c2 in c.Controls)
         SetClickEvent(c2); //rekursiv die Child Controls durchlaufen
}
(ungetester Code)

Nachtrag:
Sorry is schon spät und eigentlich sollte Rechner schon aus sein :D
Denn mir kommts gerade komisch vor, eigentlich müssten die Fenster ja automatisch in den Vordergrund kommen wenn diese angeklickt werden.
Oder ich hab dein Problem doch irgendwie falsch verstanden.
 
Zuletzt bearbeitet von einem Moderator:
bei mir kommen die child forms nur dann in den Vordergrund, wenn ich die Formleiste klicke.

an deinem Vorschlag habe ich auch gedacht, aber möchte nur als letzte Lösung anwenden, wenn es wirklich nichts besseres gibt.
 
Habs gerade nochmal mit meinem WikiParser probiert, da verwende ich ja auch MDI und die Fenster kommen immer normal in den Vordergrund.

Die Frage wäre also ob du irgendwas an deinen Forms verändert hast oder irgendwas anders gemacht beim Aufruf :confused:
 
könnte es daran liegen, dass ich den BorderStyle auf 'fixed single' gestellt habe?

ausserdem habe ich nur das Maximieren-Button disabled.

Alle Forms rufe ich mit Form.Show auf.
 
keine Ahnung obs am BorderStyle liegt, probiers einfach mit anderen Einstellungen aus ;)

Am besten du hängst mal den Quellcode und ne auführbare exe hier im Thread mit an, dann kann man sich das mal genauer anschaun.
 
im Anhang findest Du eine Zip-File. Enthält nicht mein Projekt, sondern nur das problematische Bereich (habe schnell zusammengebastelt).

Es gibt 4 Formen, eins davon ist ein mdi Form.

Wenn man auf die einzelnen Nodes doppelklickt, erscheint der entsprechende Form. Klicke mal alle drei und versuche, auf einen anderen Form zu klicken. Es wird nicht in den Vordergrund kommen, ausser wenn Du auf die Formleiste klickst.

Die Änderung der Borderstyle hat auch nichts gebracht.
 

Anhänge

  • WindowsApplication1.zip
    82 KB · Aufrufe: 17
Ich vermute mal es liegt dadran das du MdiParent an der falschen stelle setzt und zwar im Load Ereignis der Kind Fenster.

Setzte MdiParent mal direkt im Hauptfenster vor dem Show Aufruf.

Was mich auch verwirrt ist das Form2,3 und Form4 nicht instanziiert werden, aber vielleicht hab ichs auch blos übersehen.
Hab hier VB nicht drauf und habs mir nur kurz per Notepad angesehen.
 
wunderschön. es funktioniert. danke.

obwohl ich nicht ganz verstehe, warum das so ist. warum darf ich im Load Event so was nicht schreiben.
 
Zurück