MDI父窗体

MDI Parent form

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

这是我打开 MDI 窗体的代码。如果我再次打开此页面,它会一次又一次地出现,并且会打开很多 windows。有人可以帮忙吗?

如果您只想创建一个尚未打开的新表单,您可以这样做:

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

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

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