none
Como podría validar que cuando al cerrar un formulario x exista algún otro Form abierto para así traerlo al frente? RRS feed

  • Pregunta

  • Buenas tardes,

    He intentado algo así en el evento FormClosing del formulario que cierro

     foreach (Form frm in Application.OpenForms)
                {
                    if (frm.GetType() == typeof(Principales.MenuMantenimientos))
                    {
                        frm.Show();
                        break;
                    }
                }

    pero no me funciona

    Gracias de antemano,


    samuel


    viernes, 9 de octubre de 2020 16:54

Respuestas

  • Samuel

    Lo más común es no ocultar el Form principal cuando se abre un Form hijo, si no que quede en segundo plano. Si queres que el Form hijo esté al frente hasta que se cierre, usa ShowDialog() para abrirlo, y luego tendrás otra vez el Form principal. 

    Quizás así no tendrías este problema.

    • Marcado como respuesta Samuel Ignacio lunes, 12 de octubre de 2020 18:06
    viernes, 9 de octubre de 2020 22:32

Todas las respuestas

  • Hola Samuel

    Usa el método BringToFront() de la clase Form para traer un Form al frente.

    Saludos

    Pablo

    viernes, 9 de octubre de 2020 19:27
  • Hola Pablo,

    Ya lo había intentado pero no me funciona.


    samuel

    viernes, 9 de octubre de 2020 19:32
  • Un foreach con un break me causa un poco de intranquilidad ...

    en todo caso podrías probar con algo así:

    var otraForma = Application.OpenForms.Cast<Form>().FirstOrDefault(f => f.Name != this.Name);
    if (otraForma != null)
    {
            otraForma.TopMost = true;
            otraForma.TopMost = false;
    }

    Saludos

    viernes, 9 de octubre de 2020 20:17
  • Es muy raro que BringToFront() no funcione.

    Quizás ocultaste algún Form con Hide(), con lo que tendrías que mostrarlo con Visible = true, aunque creo que Show() hace lo mismo.

    También, por el if que agregas dentro del foreach, sólo los Form de tipo Principales.MenuMantenimientos se ven afectados, si hay de otras clases no les hace nada. 

    Si el problema aún persiste, para ayudarte tendría que ver más código, quizás todo el programa. Pero de lo que estoy seguro, es que en circunstancias normales, BringToFront() no debería fallar.

    viernes, 9 de octubre de 2020 20:22
  • Hola Anibal,

    Podrias ser mas especifico en tu metodo, porque "f.Name" es un parametro que creaste y lo igualaste a el mismo, es decir, f.Name=this.Name... No entiendo donde pondre mi parametro (Nombre de mi form) que quiero que valide si esta abierto o no.

    Saludos,


    samuel

    viernes, 9 de octubre de 2020 20:41
  • Hola Pablo,

    Bueno te explico, tengo varios modulos, de los cuales el principal de todos es "Principales.MenuMantenimiento" desde ese modulo se abren todos los demas, es decir, que el prorgrama nunca se cierrra hasta que ese formulario no es cerrado. Cada vez que abro un formulario(otro modulo) a este formulario (Principales.Mantenimientos) le hago un  "This.Hide();" y el formulario que aperture lo abro de manera normal: Form frm =new Form(); frm.show();

    Ya intente con el .visible=true; aun asi no lo muestra,

    Saludos,


    samuel

    viernes, 9 de octubre de 2020 20:44
  • Samuel

    Lo más común es no ocultar el Form principal cuando se abre un Form hijo, si no que quede en segundo plano. Si queres que el Form hijo esté al frente hasta que se cierre, usa ShowDialog() para abrirlo, y luego tendrás otra vez el Form principal. 

    Quizás así no tendrías este problema.

    • Marcado como respuesta Samuel Ignacio lunes, 12 de octubre de 2020 18:06
    viernes, 9 de octubre de 2020 22:32
  • Hola Pablo,

    No puedo usar el .ShowDialog porque el usuario tendra que utilizar ambos formularios en conjunto para que las ejecuciones de algunas acciones sean mas fluidas.


    samuel

    viernes, 9 de octubre de 2020 23:18
  • Está bien, podes entonces usar Show() para abrir varios Form, pero igual podes no ocultar el Form principal, que no se acostumbra hacer, y no tendrías ningún problema. Cuando trabajas con los Form hijos, el Form principal queda en segundo plano, y cuando los cerras, el Form principal sigue estando allí. Eso es lo usual.
    sábado, 10 de octubre de 2020 0:28
  • Es utilizar metodos que ya tienen las colecciones.  Si quiers hacerlo  con tu estilo prueba así:

     foreach (Form frm in Application.OpenForms)
    {
        if (frm.GetType() == typeof(Principales.MenuMantenimientos))
        {
            frm.Show();
            frm.TopMost = true;
            frm.TopMost = false;
            break;
        }
    }

    sábado, 10 de octubre de 2020 8:59
  • Hola Samuel Ignacio, 

      

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las  respuestas proporcionadas?  

    Espero su respuesta.  

    Gracias por usar los foros de MSDN.  

    Andres Aguilar 

    ____________________________  

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar  MSDNFSF@microsoft.com. 

    lunes, 12 de octubre de 2020 17:03
    Moderador