2013-12-14 4 views
0

Im делает приложение форм MDI Windows в C#, я пытаюсь создать дочерние формы mdi для открытия в одном экземпляре. Я использую этот пример кода в событии button_click в новом проекте только для целей тестирования, и он отлично работает там, но когда я реализую этот код в своем основном проекте, он просто ничего не делает. Я предоставляю те же условия, что и в тестовом проекте, но это не сработает. Я просто не понимаю, почему.Mdi Child формирует один экземпляр

В обеих формах имеется один родитель 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(); 
    } 

ответ

0

Попробуйте специально установив название «Form2» в F2 при ее создании, f2.name = "Form2". Так обращается к коллекции OpenForms.

+0

Это на самом деле сделал работу. Большое спасибо. Но я до сих пор не понимаю, почему это не нужно в некоторых случаях. Form2 F2 = новый Form2(); F2.MdiParent = this.MdiParent; F2.Show(); F2.Name = "Form2"; – Damian

0

Я согласен с тем, что область Form является проблемой здесь. Это, как я открываю 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(); 
    } 
0

MdiChildren не добавляются в коллекцию Application.OpenForms.

Вам необходимо проверить коллекцию MdiChildren() из MdiParent:

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(); 
} 
Смежные вопросы