Как показать (Bringtofront) уже открытую дочернюю форму Mdi из другой дочерней формы Mdi?

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

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

    }

person user3413736    schedule 04.09.2014    source источник
comment
если я инициализирую новые экземпляры в кнопке, он будет создавать новый экземпляр формы при каждом нажатии кнопки.   -  person user3413736    schedule 04.09.2014
comment
Заставить одну дочернюю форму узнавать о другой - очень сомнительная практика. Вместо этого поместите этот код в родительскую форму MDI, он обязательно уже знает обо всех ваших дочерних формах. Просто вызовите его из дочернего элемента, например ((MyMDIParent) this.MdiParent) .FooBar ().   -  person Hans Passant    schedule 04.09.2014
comment
Я не получил вашего объяснения, пожалуйста, пришлите еще несколько кодов, спасибо   -  person user3413736    schedule 04.09.2014


Ответы (1)


Когда вы создаете форму 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();
person Sayse    schedule 04.09.2014