2009-07-24 2 views
0

У меня есть форма (назовем ее родительской формой), из которой может быть загружена другая форма «всегда поверх, но не модальная» (как диалог, но не диалог), пользователь может оставить новую «дочернюю форму», где она и продолжать работать над родительской формой).Как вы можете определить, была ли форма закрыта пользователем или вашим кодом?

В первый раз, когда пользователь открывает этот дочерний элемент, некоторые данные загружаются и отображаются. Если они закрывают форму, я на самом деле перехватываю закрытие и просто скрываю форму - так что в следующий раз, когда они ее открывают, нам не нужно перезагружать данные (это не данные, которые сильно меняются, если вообще).

if (e.CloseReason == CloseReason.UserClosing) 
{ 
    e.Cancel = true; 
    this.Hide(); 
} 

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

В настоящее время я звоню childForm.Dispose() из родительской формы, которая прекрасно очищает вещь, но не дает мне большого контроля.

Однако, если я вызываю метод childForm.Close(), e.CloseReason по-прежнему «CloseReason.UserClosing».

Есть ли способ отличить пользователя от закрытия формы и моего кода (в родительской форме), закрывающего его?

ответ

2

Просто добавьте специальный метод «ReallyClose()», который выполняет вашу очистку и вызывается, когда вы действительно хотите закрыть форму.

+0

Я надеялся, что все же будет закрыто базовое событие формы. Я добавил событие ReallyClose и вызвал base.Close(), надеясь, что форма в базовом классе будет запущена, но, конечно, мое переопределенное событие закрытия просто запустилось, и форма снова была скрыта. Плохой запах здесь - возможно, придется изменить мое мышление на все это. –

+0

Закончено сделать код в базовой форме «защищенным», а не закрытым, и вызвать его из моего переопределенного закрытого обработчика событий. Спасибо, что помог мне на правильном пути. –

Смежные вопросы