kykyryky
@kykyryky

Как в родительской форме перехватить закрытие дочерней?

Суть проблемы на простом примере. Есть база данных автомастерской из трех таблиц: клиенты, их автомобили и заказы. Есть две формы: родительская и дочерняя. Родительская форма - окно оформления заказа с кучей textbox'ов, в которые заносятся данные владельца, его автомобиля и т.д. Если клиент не новый, есть возможность открыть дочернюю форму с таблицей клиентов, в которой можно выбрать нужную строку, и после дабл-клика по ней программа раскидает данные по textbox'ам, а форма закрывается.
А теперь сам вопрос: после закрытия дочерней формы надо бы проверить, нет ли в базе автомобиля, принадлежащего заказчику и в случае его наличия сообщить об этом в виде MessageBox, подгрузить данные о нем в форму. Или предложить выбрать автомобиль, если за заказчиком их числится несколько. А для этого в родительской форме надо определить что только что произошло закрытие дочерней формы.
Из возможных решений я пока вижу только ловить события Activated на форме, при том что оно будет срабатывать не только после закрытия дочерней формы, как-то обрабатывать именно этот случай, и... пожалуй всё.

Какие еще есть варианты?
  • Вопрос задан
  • 2015 просмотров
Решения вопроса 1
Просто обработчик события закрытия формы добавить:
var f = new Form2();
f.Owner = this;

f.FormClosed += (object s, FormClosedEventArgs args) =>
{
  MessageBox.Show("Форма закрыта!");
};

f.Show();

Либо так:
private void button1_Click(object sender, EventArgs e)
{
  var f = new Form2();
  f.Owner = this;

  f.FormClosed += Form2_FormClosed;

  f.Show();
}

private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
  MessageBox.Show("Форма закрыта!");
}

Еще можно показать дочернюю форму как диалог (для контейнера Mdi не подойдет):
var f = new Form2();
f.Owner = this;
// главная форма будет недоступна
f.ShowDialog();
// после закрытия диалоговой формы, выполнение продолжится
MessageBox.Show("Форма закрыта!");
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы