2013-12-14 31 views
0

在c#中制作MDI Windows窗体应用程序我试图让mdi子窗体在单个实例中打开。我在一个新项目的button_click事件中使用了这个示例代码,仅用于测试目的,它在那里工作正常,但是当我在我的主项目中实现此代码时,它什么都不做。我提供了与测试项目完全相同的条件,但它不起作用。我只是不明白为什么。Mdi子窗体单实例

两种表格都具有相同的MDI父级。 Form1加载MDI父项。

在Form1的按钮单击事件开扩窗体2:

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

回答

0

尝试特别是当你创建它,f2.name = "Form2"名称“窗体2”设置为F2。这就是OpenForms集合如何解决它。

+0

这实际上做的工作。非常感谢你的队友。但我仍然不明白为什么在某些情况下不需要这样做。 Form2 F2 = new Form2(); F2.MdiParent = this.MdiParent; F2.Show(); F2.Name =“Form2”; – Damian

0

我同意Form的范围是一个问题。这就是我如何开一个Form我主要的MDI窗体里面:

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