c# - ¿Cómo cerrar el formulario principal sin dejar que se cierre la aplicación?

Lo que quiero hacer:
->Abrir un formulario MDI
->Cerrar el formulario principal de proyectos
->Sin cerrar la aplicación

Que he hecho:

frmMain fm = new frmMain();
fm.Show();
this.Close()

¡Cualquier ayuda sería apreciada! :)

preguntado el 12 de junio de 12 a las 21:06

3 Respuestas

Si realmente desea cerrar el formulario principal, pero dejar la aplicación ejecutándose, puede hacer que su clase predeterminada inicie el contexto de la aplicación:

using(MyContext myContext = new MyContext())
{
    Applicaton.Run(myContext);
}

sin que importe MyContext hereda de ApplicatonContext.

El contexto de su aplicación puede cargar y cerrar formularios según sea necesario. Hago esto con un proyecto en el que tengo el contexto para iniciar un formulario de inicio de sesión. Solo después de que se completa con éxito, se carga el formulario principal. También permito que el "cierre de sesión" del programa se maneje terminando el formulario principal y recargando el formulario de inicio de sesión.

EDITAR: De los comentarios, puede ser que todo lo que esté buscando sea .Hide(). Esto no hace que su formulario se descargue y una llamada a .Show() lo restaurará (por ejemplo, puede usar un temporizador u otro formulario que contenga una referencia a su formulario principal para realizar la llamada). Prefiero usar un ApplicationContext porque asume la responsabilidad de mantener su programa en la memoria lejos de un elemento de la interfaz de usuario que el usuario puede intentar cerrar.

Respondido el 12 de junio de 12 a las 21:06

no entendí! ¡No sé sobre contextos en C #! Por favor, ¿puede dar otra manera? - Mohammad Areeb Siddiqui

¿No complica esto demasiado las cosas? En el ejemplo de la ventana de inicio de sesión, podría simplemente abrir el cuadro de diálogo desde el ctor de la ventana principal, incluso antes de inicializar los componentes, etc. Realmente creo que todo lo que está buscando es Hide(), pero me encantaría saber por qué eso no será suficiente. - Var simple

Un contexto es solo un contenedor para administrar los formularios de su proyecto. Si su clase predeterminada para el proyecto lo llama como se indica, puede iniciar cualquier formulario o ejecutar cualquier proceso en segundo plano desde allí. Ver: c-sharpcorner.com/UploadFile/johnconwell/… para ver un ejemplo en uso. - godeke

@YoryeNathan, por su respuesta, probablemente complique demasiado las cosas, pero supuse incorrectamente que sabía sobre .Hide() y estaba buscando un contenedor de código. - godeke

Puede utilizar el método Ocultar.

Intenta hacer esto:

frmMain fm = new frmMain();
this.Hide();
fm.Show();

o:

frmMain fm = new frmMain();
this.Hide();
fm.ShowDialog();
this.Show();

Este último abrirá la ventana, y una vez cerrada, volverá a aparecer la ventana anterior.

Respondido el 12 de junio de 12 a las 21:06

Gracias, esto funcionó perfectamente y es tan simple como las otras respuestas. ¡Gracias! - steve byrne

Lo que hice para evitar esto es:

this.Hide()

Probablemente no sea la mejor manera de hacer esto, pero aún así.

Incluso podrías recuperarlo llamando

this.Show()

Respondido el 12 de junio de 12 a las 21:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.