在c#中停靠mdi控件

时间:2011-04-04 13:49:25

标签: c# winforms dock

我在左侧的面板中有一个可以点击的主窗体,具体取决于您点击新打开的窗体类型。在righti有另一个面板,我想停靠点击左侧打开的表格。

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

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();
                }
            }
        }
    }

感谢

1 个答案:

答案 0 :(得分:2)

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

这只是将它变成UserControl。你最好把它变成一个UserControl,它可以使用更少的资源并且记录得更好。