Member 10570811 Ответов: 2

C# mdi между тремя формами


у меня есть form1,form2 и form3.form1-моя основная форма mdi.а также свойство, установленное в ismdicontainer, истинно.
форма 1 бутон нажмите кнопку форма 2 Открыть
ниже кода.
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.ShowDialog();
        }
    }
}


если нажать кнопку форма 2, я хочу открыть форму 3 в форме 1 с помощью mdiparent, и форма 2 будет закрыта.
вот мой код форма 2 Кнопка нажмите код
private void button1_Click(object sender, EventArgs e)
       {
           this.Hide();
           Form3 f3 = new Form3();
           f3.MdiParent = this.MdiParent;
           f3.Show();

           this.Close();

       }


но это не работает, пожалуйста, помогите.

Что я уже пробовал:

<pre> private void button1_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form3 f3 = new Form3();
            f3.MdiParent = this.MdiParent;
            f3.Show();
            
            this.Close();

        }

0x01AA

Потому что Form2 не имеет никакого MdiParent

Maciej Los

Похоже на ответ, Бруно.

Member 10570811

также у меня есть набор форма 2 ismdicontainer свойство имеет значение true.но не решить.
пожалуйста, помогите мне с правильным кодом.

Maciej Los

Используйте виджет "ответить", чтобы быть уверенным, что система сообщит пользователю о вашем ответе.

Dave Kreskowiak

Вы не можете иметь форму MdiContainer внутри другой формы MdiContainer. Если вы пытаетесь использовать как Form1, так и Form2 в качестве MdiContainers, Form2 никогда не может быть MdiChild Form1.

2 Ответов

Рейтинг:
2

OriginalGriff

Форма 2 не должна знать о форме 3 или даже о форме 1.
Вместо этого Form2 отправляет сообщение своему родителю - который оказывается Form1 - и решает, что произойдет в результате. Это происходит через события, как и все остальное в .NET. (Упрощение, я знаю).

Видеть здесь: Передача информации между двумя формами, Часть 3: Ребенок ребенку[^] - это дает общие принципы.


Member 10570811

пожалуйста, помогите мне с кодом.тайский я понимаю легко.

OriginalGriff

Перейдите по ссылке - она объясняет и дает код.

Member 10570811

Iam пытался, но не мог понять.pls помочь с кодом решения, так что я могу переместить forword.iam застрял здесь

OriginalGriff

Какая часть этого дает вам трудности - я понятия не имею, где вы находитесь в своем курсе, что вы делаете или не знаете, как это сделать, - поэтому вы должны сказать нам.

Member 10570811

у меня есть 3 формы.
form1-это основная форма, то есть родительская форма, а свойство ismdicontainer имеет значение true в form1.

//вот форма 1 Нажмите кнопку для открытия формы 2
частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{
Формы Form2 Ф2 = новые формы Form2();
Ф2.Метод showdialog();
}
теперь я хочу, чтобы форма 2 Нажмите кнопку, затем form2 закрыть и form3 открыть ребенка в форме 1 родителя.

пытался ниже код

// form2 нажмите кнопку для открытия формы 3 и закрытия формы 2
частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{
//скрыть форму 2
этот.Скрыть();
//открытая форма 3
Form3 Ф3 = новый Form3();
f3.MdiParent = Form1.ActiveForm;
Ф3.Показать();
//закрыть форму2
этот.Закрывать();

}

форма 2 закрыта, но форма 3 не открыта как дочерняя форма 3 для родительской формы 1.

пожалуйста, поделитесь правильным кодом.это полезно для меня.
извините за мой плохой язык.

OriginalGriff

Так... ты не слышал ни слова из того, что я сказал. Есть ли смысл задавать вопрос, если вы игнорируете ответы, которые получаете?
И более того, есть ли какая-то веская причина для меня тратить свое время, помогая вам, если вы просто собираетесь игнорировать то, что я говорю?

Рейтинг:
2

Maciej Los

Кажется, вы просто хотите открыть дочернюю форму в этой схеме:
Form1 должна быть основная форма. Form2, Form3 и т. д. должна быть дочерняя форма.
Порядок открытия форм таков:
Form1 -> Form2 -> Form3

Каждый конструктор дочерней формы должен быть изменен на:

public Form2(Form ParentForm)
{
    InitializeComponent();
    this.MdiParent = ParentForm;
}


public Form3(Form ParentForm)
{
    InitializeComponent();
    this.MdiParent = ParentForm;
}


Использование:

//in Form1
private void button1_Click(object sender, EventArgs e)
{
    Form2 form2 = new Form2(this);    //refers to Form1
    form2.Show();
}

//in Form2
private void button1_Click(object sender, EventArgs e)
{
    Form3 form3 = new Form3(this.MdiParent); //refers to Form2.MdiParent, which is Form1
    form3.Show();
}