Forms dynamisch erweitern


Thomas Wölfer
Thomas Wölfer

12. April 2006


Unter MFC (von der reinen Win32 API brauchen wir erst gar nicht reden) war es immer ein wenig aufwendig, Dialoge dynamisch zu erweitern. Mit dem Support für Tabs auf Dialogen ging das dann irgendwann deutlich besser - war aber immer noch "komisch".

Mit Windows.Forms ist die Sache hingegen extrem einfach. Angenommen, man hat einen Dialog mit einem TabControl, und der Dialog soll zur Laufzeit um neue TabPages erweitert werden. Diese Pages, einschliesslich aller Eventhandler, legt man einfach mit dem Forms-Editor auf einer anderen Form an: Man tut also einfach so, als wäre die 2. Form die "richtige" Form. Spezialcode für die Tatsache, das die TabPages zur Laufzeit auf einer anderen Form liegen braucht man nicht.

Jetzt geht es nur noch darum, die Pages von der einen auf die andere Form zu transportieren. Unter der Vorraussetzung das die Form mit den zusätzlichen Pages in Form der Klasse Option1 vorliegt, und das TabControl auf dieser Form den Namen "tabControl1" hat, geht das wie folgt:

private void GetExternalPages()
{
   Option1 o = new Option1();
   Control[] controls = o.Controls.Find("tabControl1", false);
   if (controls.Length != 1) throw new InvalidOperationException("Quellform ist nicht richtig aufgebaut. Vermutlich fehlt das TabControl.");

   TabControl source = controls[0] as TabControl;

   while( source.TabPages.Count > 0)
   {
      TabPage page = source.TabPages[0];
      source.TabPages.Remove(page);
      this.tabControl1.TabPages.Add(page);
   }
}