Entwickler-Ecke

WinForms - MDI - nur 1 childfenster


Skiller-1988 - Fr 29.08.08 15:26
Titel: MDI - nur 1 childfenster
Hi,
auch wenn ich mich schon fsat für diese Frage schähme, weil die Antwort sicher super einfach ist, muss ich sie trozdem stellen da mir zum Freitag keine elegante Lösung dazu einfällt.

Also mein Problem:
Ich habe ein Hauptfenster ( = Mdicontainer ) und möchte dann innerhalb dieses Mdicontainer ein mdichildfenster öffnen, was ja soweit kein Problem ist, allerdings möchte ich nur genau 1 mdi childfenster öffnen und wenn ich das zweite mal auf den Butten, für das childfenster klicke sollte sich kein weiteres childfenster öffnen sondern der Focus auf das geöffnete gesetzt werden.


C#-Quelltext
1:
2:
3:
            Form2 mi = new Form2 ();
            mi.MdiParent = this;
            mi.Show();


so hab ich das gerade weis aber das es so nicht gehen kann weil ja immer ein neues Objekt erstellt wird.


Th69 - Fr 29.08.08 15:59


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Form[] forms = MdiChildren;
if(forms.Length > 0)
{
  forms[0].Select();
}
else
{
   ... // dein bisheriger Code
}


Aber wenn du nur genau 1 Unterfenster brauchst, warum benutzt du dann überhaupt MDI?


Skiller-1988 - Fr 29.08.08 16:39

Ja müsste funktionieren erstmal Danke für deine Hilfe, eigentlich hätte ich da aber auch selber drauf kommen können.
Ich nutze MDI damit ich ein Hauptfenster habe und ich möchte nur genau 1 MDIchildren pro Kategorie bzw Button, das heißt es können dann schön mehrere MDIchildrenfenster gleichzeitig offen sein nur sollten diese unterschiedlichen Inhalt haben.


Th69 - Fr 29.08.08 16:52

Ok, dann benötigst du aber eine andere Abfrage:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
Form OpenForm(Type type)
{
  foreach(Form form in MdiChildren)
  {
    if(form.GetType() == type)
    {
       form.Select();
       return form;
    }
  }

  Form newForm = (Form)Activator.CreateInstance(type);
  newForm.MdiParent = this;
  newForm.Show();

  return newForm;
}

// Aufruf:
OpenForm(typeof(Form2)); // besseren Namen für Formular vergeben!!!

Jedes Unterformular muß dann eine eigenständig von Form abgeleitete Klasse sein.
Alternativ könntest du auch eine Unterformular-Klasse mit einer Kategorie-Auflistung (enum) erstellen und dann die Abfrage (statt dem Typ dann den enum-Wert) ändern.