Este es el comportamiento de las formas modales. Cuando utiliza form.ShowDialog()
, es que pregunta para este comportamiento. La razón de esto es que form.ShowDialog no regresa hasta que el formulario está oculto o destruido. Entonces, cuando el formulario está oculto, la bomba dentro de la forma. ShowDialog lo destruye para que pueda regresar.
Si desea mostrar y ocultar un formulario, a continuación, usted debe utilizar el modelo de diálogo no modal http://msdn.microsoft.com/en-us/library/39wcs2dh(VS.80).aspx
form.Show()
vuelve inmediatamente, puede mostrar y ocultar esta ventana todo lo que quieren y que no será destruido hasta lo destruyes explícitamente
Cuando utiliza formularios no modales que no son hijos de un formulario modal, entonces también necesita ejecutar un mensaje de bomba usando Application.Run
o Application.DoEvents
en un bucle. Si el hilo que crea un formulario sale, entonces el formulario será destruido. Si ese hilo no ejecuta una bomba, las formas que posee no responderán.
Editar: esto suena como el tipo de cosa que el ApplicationContext
está diseñado para resolver. http://msdn.microsoft.com/en-us/library/system.windows.forms.applicationcontext.aspx
Básicamente, se derive una clase de Application Context, pasar a una instancia de Application Context como argumento para Application.Run()
// Create the MyApplicationContext, that derives from ApplicationContext,
// that manages when the application should exit.
MyApplicationContext context = new MyApplicationContext();
// Run the application with the specific context.
Application.Run(context);
su contexto de aplicación tendrá que saber cuándo está bien para salir de la aplicación y al tener la formulario (s) ocultos no deben salir de la aplicación. Cuando es hora de que la aplicación salga.El contexto o formulario de su aplicación puede llamar al método ExitThread()
del contexto de la aplicación para finalizar el ciclo del mensaje. En ese punto regresará Application.Run()
.
Sin saber más sobre la jerarquía de sus formularios y sus reglas para decidir cuándo ocultar formularios y cuándo salir, es imposible ser más específico.
muchas gracias a ambos. – iTEgg
¿cómo vuelvo a activar e.cancel = false? para que pueda cerrar el formulario más tarde? – iTEgg
Creo que tendré que agregar una bandera que me permita ahora si quiero cerrarla de verdad o no. – iTEgg