Mdi Child形成单个实例

本文关键字:单个 实例 Child Mdi | 更新日期: 2024-09-26 00:07:36

我正在c#中制作一个MDI Windows窗体应用程序,我正在尝试使MDI子窗体在单个实例中打开。我在一个新项目的button_click事件中使用这个示例代码只是为了测试目的,它在那里运行得很好,但当我在主项目中实现这个代码时,它什么也没做。我提供了与测试项目完全相同的条件,但它不起作用。我就是不明白为什么。

两个窗体都具有相同的MDI父级。Form1与MDI父级一起加载。

Form1中用于打开Form2:的按钮点击事件

    private void button1_Click(object sender, EventArgs e)
    {
        if (System.Windows.Forms.Application.OpenForms["Form2"] as Form2 == null)
        {
            Form2 F2 = new Form2();
            F2.MdiParent = this.MdiParent;
            F2.Show();
        }
        else 
        {
            Form2 F2 = (Form2)Application.OpenForms["Form2"];
            F2.Focus();
        }
    }

以下是更多信息:

MDI父窗体是项目的起始窗体。

MDI父级的Form Load如下所示:

    private void MDI_Load(object sender, EventArgs e)
    {
        Form1 F1 = new Form1();
        F1.MdiParent = this;
        F1.Show();
    }

Mdi Child形成单个实例

创建名称"Form2"f2.name = "Form2"时,请尝试将其专门设置为F2。这就是OpenForms集合处理它的方式。

我同意Form的范围是一个问题。这就是我在主mdi表单中打开Form的方式

public partial class FormMain : Form
{
    FormTest ftmTest;
    ...
    void testToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if(frmTest == null)
        {
            frmTest = new FormTest();
            frmTest.MdiParent = this;
        }
        frmTest.Show();
        frmTest.BringToFront();
    }

MdiChildren未添加到Application.OpenForms集合中。

您需要检查MdiParent:的MdiChildren()集合

    private void button1_Click(object sender, EventArgs e)
    {
        foreach (Form frm in this.MdiParent.MdiChildren)
        {
            if (frm is Form2)
            {
                if (frm.WindowState == FormWindowState.Minimized)
                    frm.WindowState = FormWindowState.Normal;
                frm.Focus();
                return;
            }
        }
        Form2 F2 = new Form2();
        F2.MdiParent = this.MdiParent;
        F2.Show();
    }
private void button1_Click(object sender, EventArgs e)
{
    foreach (Form frm in this.MdiChildren)
    {
        if (frm is Form2)
        {
            if (frm.WindowState == FormWindowState.Minimized)
                frm.WindowState = FormWindowState.Normal;
            frm.Focus();
            return;
        }
    }
    Form2 F2 = new Form2();
    F2.MdiParent = this;
    F2.Show();
}

我的解决方案

代码:

View.FormV view = Application.OpenForms["FormV"] as View.FormV ;
        if(view == null)
        {
            View.FormV View = new FormV();
            View.MdiParent = this;
            View.Show();
        }
        else
        {
            view.Focus();
        }

我的样品

public partial class Form1: Form
{
    Form frm= new Form2();
    
    .........
        if (frm.IsDisposed) 
        {
            frm= new Form2(); 
        }
        frm.MdiParent = this;
        frm.WindowState = FormWindowState.Maximized;
        frm.Show();
        frm.BringToFront();
    
}