Я пытаюсь закрыть свою основную (родительскую) форму, когда закрывается дочерняя форма. Однако это дает мне исключение StackOverflow.
Однако, если я вызываю _child.Dispose для события FormClosed, он работает как положено. Должен ли я сделать это? Почему я должен позвонить в Dispose? (из-за .Show () это не должно быть правильно, верно?
Небольшая демонстрация:
public partial class frmChild : Form
{
public frmChild()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
}
public partial class frmParent : Form
{
private frmChild _child;
public frmParent()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
_child = new frmChild();
_child.FormClosed += child_FormClosed;
_child.Show(this);
}
void child_FormClosed(object sender, FormClosedEventArgs e)
{
//_child.Dispose(); <-- uncomment and it works
this.Close(); // <-- StackOverflow exception
}
}
Решение, прокомментированное Теоманом Сойгулом (для дальнейшего использования):
Закрытие основной формы
this.Close (); сигнализирует всем детям
окна закрыть, чтобы
создает бесконечный цикл
После вызова this.Close () в родительском объекте он будет сигнализировать всем дочерним элементам Close aswel, который отправит другое событие FormClosed ...
Я решил это, не указав владельца в _child.Show();
Я все равно не использовал владельца.