none
mostrar formularios usando reflection C# RRS feed

  • Pregunta

  • Estimada Comunidad,

    Mi intencion es optimizar el codigo para abrir formularios desde un menu, pero los que ya estan instanciados solo deseo mostrarlos en forma maximizada.

    He implementado el codigo de Leandro que esta en siguiente link:

    http://ltuttini.blogspot.com/2013/02/winform-instanciar-form-conociendo-su.html

    Yo lo he dejado de la siguiente manera:

            private void ActivarFormulario(string formulario)
            {
                Assembly asm = Assembly.GetEntryAssembly();
                Type formType = asm.GetType(formulario);
                Form f1 = (Form)Activator.CreateInstance(formType);
                f1.MdiParent = this;
                f1.WindowState = FormWindowState.Maximized;
                f1.Show();
            }

    Para verificar si esta instanciado puedo usar cualquiera de estas instrucciones:

    Form frm = this.MdiChildren.FirstOrDefault(x => x is frmComRPCA);

    Form frm = this.MdiChildren.OfType<frmComRPCA>().Where(x => x.Name == "frmComRPCA").FirstOrDefault();

    pero la verdad no se como implementarlo,

    La implementacion de llamada lo tengo asi:

            private void mnuComRPCA_Click(object sender, EventArgs e)
            {
                ActivarFormulario("Rsa.frmComRPCA");
            }

            private void mnuComRPCB_Click(object sender, EventArgs e)
            {
                ActivarFormulario("Rsa.frmComRPCB");
            }

    Cualquier ayuda que me puedan dar desde les quedo agradecido.

    Saludos

    Guivan

    jueves, 15 de agosto de 2019 15:12

Respuestas

Todas las respuestas

  • hola

    El link que has puesto explica como instanciar el form por el nombre, pero si validas que el form ya esta instanciado solo tienes que usar el

    frm.BringToFront();

    para ponerlo en primer plano

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 15 de agosto de 2019 17:04
  • Gracias Leandro.

    El codigo quedo asi

            private void ActivarFormulario(string formulario)
            {
                Assembly asm = Assembly.GetEntryAssembly();
                Type formType = asm.GetType(formulario);
                Form frmExists = this.MdiChildren.FirstOrDefault(x => x.GetType() == formType);

                if (frmExists == null)
                {
                    Form frmNew = (Form)Activator.CreateInstance(formType);
                    frmNew.MdiParent = this;
                    frmNew.WindowState = FormWindowState.Maximized;
                    frmNew.Show();
                }
                else
                {
                    frmExists.BringToFront();
                    frmExists.WindowState = FormWindowState.Maximized;
                }
            }

    Saludos

    Guivan

    jueves, 15 de agosto de 2019 21:01