У меня есть Form1
с 2 переключателями (rb1
и rb2
) и одной обычной кнопкой (btn
). Когда я нажимаю на btn
, я должен открыть Form2
, так как ребенок MDI Form1
проверяется, если rb1
, или как обычно Dialog
, если проверено rb2
. Кроме того, в любой момент может быть только один Form2
.Ничего не происходит, когда я закрываю максимальную дочернюю форму MDI
Это мой код:
public partial class Form1 : Form
{
Form2 f2;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (f2 != null)
{
MessageBox.Show("Close form!");
return;
}
f2 = new Form2();
if (radioButton1.Checked == true)
{
this.IsMdiContainer = true;
f2.MdiParent = this;
f2.Show();
}
else
{
f2.Show();
}
f2.FormClosed += f2_FormClosed;
}
void f2_FormClosed(object sender, FormClosedEventArgs e)
{
this.IsMdiContainer = false;
f2 = null;
}
}
Все работает, как должно, за исключением, когда я максимально Form2
, как MDI ребенка, а затем закройте его. После этого экрана остается тот же (как я даже не закрыл Form2
), но я могу открыть новый Form2
, а затем Form1
«Form1 - [Form2]
», и если я повторю процесс, это будет «Form1 - [Form2] - [Form2]
» и т. Д. .
Я понял, что я мой f2_FormClosed
метод должен быть
void f2_FormClosed(object sender, FormClosedEventArgs e)
{
f2.Hide(); // <<<<<<<<-----------NEW
this.IsMdiContainer = false;
f2 = null;
}
, но я не знаю, почему; Form2
должен быть закрыт, я не знаю, почему я должен его скрывать ?!
Спасибо!
Изменение свойства IsMdiContainer на форме, окно которой создано, имеет * много * побочных эффектов. Не делай этого. –