SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: carl3068 en Lunes 26 de Octubre de 2009, 03:10

Título: Problemas con componente MDI
Publicado por: carl3068 en Lunes 26 de Octubre de 2009, 03:10
Buenas noches, soy nuevo y me gustaria integrarme a esta comunidad.

Bueno mi primera duda es la siguiente, espero me la puedan responder. Tengo 4 formularios, de los cuales 1 es padre y 3 son hijo.

Dentro del formulario padre tengo un boton para cada uno de los otros formularios, con el cual los mando llamar. La cuestion es que cada vez que le doy click a un boton me aparece el formulario hijo tantas veces le doy al boton, asi que necesito que solo me abra el formulario hijo solamente un vez aunque de muchos click.

Espero me puedan, ayudar. Gracias!   :beer:
Título: Re: Problemas con componente MDI
Publicado por: tannke en Lunes 26 de Octubre de 2009, 09:00
podrias hacer por ejemplo:

habres la declaración fuera de los eventos click.

Form2 mdi1;
Form3 mdi2;
Form4 mdi3;

Luego en los eventos Click de los botones pones:

if(mdi1==null)
   {
         mdi1 = new Form2();
         mdi1.Show();   //bueno aqui ya lo abres como quieras, pongo show como ejemplo
   }

espero te sirva, saludos
Título: Re: Problemas con componente MDI
Publicado por: gerardoskype en Martes 27 de Octubre de 2009, 03:08
Bueno, que yo sepa cuando usas mdicontainer no puedes establecer  Formulario.ShowDialog(); porque te marca error.

por otro lado yo utilizo el siguiente codigo para llamar solo 1 vez al form.hijo


 foreach (Form f in this.MdiChildren)
            {
                if (f.Name == "Nombre del Formulario a llamar")
                {
                    f.Activate();
                    return;
                }
            }
            Proveedor frm = new Proveedor();
            frm.MdiParent = this;
            frm.WindowState = FormWindowState.Maximized;
            frm.Show();


y para cuando llamo a otro sin haber cerrado el primero.

 private void "Formulario.hijo"_Deactivate(object sender, EventArgs e)
        {
            this.Dispose();
        }
para cerrarlo. y cuando lo llamas solo se actualizo. no se abrio tantas veces como lo hacia antes.

espero te sirva, tenia otro pero en el momento no lo recuerdo.