У меня есть основная форма MDI. На нем у меня есть форма, и я хочу, чтобы она показывала окно сообщения перед закрытием (спрашивая пользователя, сохранять ли изменения).Как предотвратить закрытие основной формы MDI у ребенка MDI
До сих пор так хорошо, однако я обнаружил, что закрытие основной формы MDI не приводит к событию FormClosing дочернего события MDI. Я решил, что позвоню MdiChild. Закрыть() в событии FormClosing основного события MDI (которое поднимается). Этот шов для работы, однако он вызывает проблему ...
В появившемся ящике сообщений я предлагаю пользователю сохранять изменения, а не сохранять изменения и отменять закрытие. Обычно это прекрасно работает, однако я не могу найти способ отменить событие FormClosing MDI main. Есть ли элегантный способ сделать это?
EDIT: Я решил это, выбросив исключение (когда пользователь решил отказаться от процедуры закрытия), которая попала в событие FormClosing MDI main. Таким образом, я знаю, когда мне нужно отменить событие FormClosing в MDI main, и эти швы хорошо работают ... Однако я просто не могу поверить, что этот «hax» - единственный способ сделать это. Наверняка есть лучший способ?
Нет, не делайте этого так, потому что вы, вероятно, захотите остановиться, как только пользователь нажмет «Отмена» в приглашении «Сохранить изменения». Вы не хотите, чтобы пользователю приходилось циклически перебирать каждую форму в этот момент, и этот код делает это. Вместо этого, после вызова Close(), установите флажок frm.IsDisposed. Если это неверно, форма по какой-то причине не может закрыться, и вы должны установить e.Cancel = true и выйти из вашего цикла foreach. Таким образом, как только пользователь нажимает «Отмена», вся операция останавливается. –