¿Cómo puede determinar si un formulario ha sido cerrado por el usuario o por su código?

Tengo un formulario (llamémoslo formulario primario), desde el cual se puede cargar otro formulario "siempre en la parte superior pero no modal" (como un diálogo pero no un diálogo: el usuario puede dejar el nuevo "formulario secundario" donde está y continuar para trabajar en el formulario padre).

La primera vez que el usuario abre ese formulario hijo, se cargan y muestran algunos datos. En caso de que cierren el formulario, en realidad intercepto el cierre y simplemente oculto el formulario, de modo que la próxima vez que lo abran, no tenemos que volver a cargar los datos (no son los datos los que cambian mucho, en todo caso).

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

Más adelante, cuando se cierre el formulario principal, quiero forzar que el formulario secundario se cierre correctamente: ejecutar un código en su forma básica para almacenar su ubicación y tamaño para la próxima vez.

Actualmente llamochildForm.Dispose () de la forma principal que limpia bien las cosas, pero no me da mucho control.

Sin embargo, si llamo al método childForm.Close (), el e.CloseReason sigue siendo "CloseReason.UserClosing".

¿Hay alguna forma de distinguir entre el usuario que cierra el formulario y mi código (en el formulario primario) al cerrarlo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta