MDI父表格

时间:2015-06-06 09:53:54

标签: c# windows mdi

Form1 objForm1 = new Form1 ();
objForm1 .MdiParent = this;
objForm1 .Show();

这是我打开MDI表单的代码。如果我再次打开此页面,它会一次又一次出现,并打开这么多窗口。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

如果您只想在尚未打开的情况下创建新表单,可以执行以下操作:

ShowFormIfNotOpen(this,typeof(Form1));

public static void ShowFormIfNotOpen(Form mainform,Type type)
    {
        foreach (Form item in mainform.MdiChildren)
            if (item.GetType() == type)
            {
                item.Activate();
                return;
            }

         Form form = Activator.CreateInstance(type) as Form;
        form.MdiParent = mainform;
        form.Show();
    }

<强>更新

1)在表单中添加一个public static bool字段/属性(IsAlreadyShown)

public static bool IsAlreadyShown { get; set; }

2)在表单

的构造函数中将其设置为true
public Form1()
{
     InitializeComponent();
     IsAlreadyShown = true;
 }

3)调用ShowForm1(this);

public static void ShowForm1(Form parentForm)
    {
        if(Form1.IsAlreadyShown ==true)
                return;


        Form1 objForm1 = new Form1 ();
        objForm1 .MdiParent = parentForm;
        objForm1 .Show();
    }

答案 1 :(得分:0)

到目前为止,我从您的问题中了解到,您希望form1成为MDI容器。如果你想要这个,那么只需将属性ISMdiContainer设置为true。现在如果你想将这个表单Form1设置为任何表单的父类,你可以使用你的代码

    FormAny objFormAny = new FormAny ();
    objFormAny .MdiParent = objForm1; // reference of MDI Container
    objFormAny .Show();