2014-09-04 4 views
0

В моем приложении у меня есть 4 формы, form1 - контейнер mdi, а остальные формы - это childs, в form1. Я открываю всю дочернюю форму в своем событии загрузки. в детской form2 у меня есть кнопка, которая будет переключаться на childform3.my проблема заключается в том, чтобы показать childform3 (который уже открыт) от кнопки в childform2Как показать (Bringtofront) уже открытую дочернюю форму Mdi из другой формы ребенка Mdi?

   form1: 

       Form2 formchild1; 
       Form3 formchild2; 
       Form4 formchild3; 

     private void Form1_Load(object sender, EventArgs e) 
     { 


     if (formchild2 == null) 
     { 
      formchild2 = new Form3(); 
     } 
     formchild2.MdiParent = this; 
     formchild2.Dock = DockStyle.Fill; 
     formchild2.Show(); 
     //formchild2.BringToFront(); 


     if (formchild3 == null) 
     { 
      formchild3 = new Form4(); 
     } 
     formchild3.MdiParent = this; 
     formchild3.Dock = DockStyle.Fill; 
     formchild3.Show(); 


     if (formchild1 == null) 
     { 
      formchild1 = new Form2(); 
     } 
     formchild1.MdiParent = this; 
     formchild1.Show(); 
     formchild1.Dock = DockStyle.Fill; 
     formchild1.BringToFront(); 


     } 


     form2: 

     Form3 formchild2; 
    private void button1_Click(object sender, EventArgs e) 
    { 
     //what i have to write hare.. 
      //formchild2 = new Form3(); 
      //formchild2.MdiParent = this.ParentForm; 

      //formchild2.Dock = DockStyle.Fill; 
      //formchild2.Show(); 
      //formchild2.BringToFront(); 

    } 
+0

Если я инициализирую новые экземпляры в кнопке, он создаст новый экземпляр формы при каждом нажатии кнопки. – user3413736

+0

Сделать одну дочернюю форму, осведомленную о другой, является очень практичной практикой. Поместите этот код в родительскую форму MDI вместо этого, он обязательно уже знает обо всех ваших дочерних формах. Просто назовите его от ребенка, что-то вроде ((MyMDIParent) this.MdiParent) .FooBar(). –

+0

Я не получил ваше объяснение, пожалуйста, любезно отправьте еще несколько кодов, спасибо – user3413736

ответ

0

При создании Form2 (Пожалуйста, измените имена переменных, его Потребовалось некоторое время, чтобы выяснить, что formchild1 был на самом деле form2), вам нужно создать экземпляр Form2 экземпляру

if (formchild1 == null) 
{ 
    formchild1 = new Form2(/*Either pass in a Form3 here*/); 
} 
formchild1.formChild2 = formchild2; //Or make formChild2 public member 
formchlid1.SetForm(formChild2); //Or make a method that sets it 
formchild1.MdiParent = this; 
formchild1.Show(); 
formchild1.Dock = DockStyle.Fill; 
formchild1.BringToFront(); 

Затем, чтобы показать его снова вы можете просто сделать

formchild2.BringToFront(); 
0
childform3 childform3=new childform3; 

private void button1_Click(object sender, EventArgs e) 
    { 
     if (!childform3.IsDisposed) 
      childform3.Select(); 
     else 
      childform3= new frmSearch(); 
     childform3.MdiParent = ParentForm; 
     childform3.Show(); 
    }