Mdi Child形成单个实例

时间:2013-12-14 23:21:28

标签: c# forms instance mdi

我在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父级的表单加载如下:

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

4 个答案:

答案 0 :(得分:0)

尝试在创建名称时将名称“Form2”设置为F2,f2.name = "Form2"。这就是OpenForms集合如何解决它。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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