2011-04-04 49 views
0

我有一个左侧可以点击的面板中的主窗体,这取决于你点击一个新类型的窗体打开。在righti有另一个面板,我想停靠点击左侧已打开的窗体。在c中停靠mdi控件#

如何在右侧的面板中将表单添加到另一个表单中?下面的代码的问题是它添加了第一个元素。然而,当我添加第二个元件的面板后面它们都dissapear:/

private void addToPanel2(Form o) 
{ 
    if (o is Form) 
    { 

     if (panel2.Controls.Count == 0) 
     { 
      o.MdiParent = this; 
      panel2.Controls.Add(o); 
      o.Dock = DockStyle.Top; 
      o.Show(); 
     } 
     else 
     { 
      //then we know that this is an addable data item 
      foreach (Form obj in panel2.Controls) 
      { 
       if(obj.GetType().Name.Equals(o.GetType().Name)) 
       { 
        //we dont want to add it as the data type is already open 
        MessageBox.Show("This data item must already be open. Please Check."); 
       } 
       else 
       { 
        // add it as its not in there 
        Form f = (Form)obj; 
        f.MdiParent = this; 
        f.Dock = DockStyle.Top; 
        f.Show(); 
       } 
      } 
     } 
    } 

感谢

+0

你可能想看看http://sourceforge.net/projects/dockpanelsuite/。上次我检查,它可以处理你想要的和更多;) – 2011-04-04 14:06:32

+0

也许你可以使用工具栏,而不是左侧面板?然后,您可以将所有子窗体添加到主窗体。 – sventevit 2011-04-04 14:52:38

回答

2

这是不可能的,MDI子形式不能是面板的子控件。向面板添加非MDI表单也是一个不确定的主张,但是受支持。调用它的SetTopLevel()方法,传递false,将其Visible属性设置为true。您还必须将其FormBorderStyle属性设置为无,它不再适合作为顶级窗口。

这只是把它变成一个UserControl。实际上使它成为一个UserControl会更好,它使用的资源少得多,并且记录更好。