Foros del Web » Programación para mayores de 30 ;) » .NET »

Sólo una instancia de un formulario.

Estas en el tema de Sólo una instancia de un formulario. en el foro de .NET en Foros del Web. Alguien sabe cómo puedo hacer para tener una instancia de un formulario que es un mdichild? Estoy usando c#.net con vs 2010. Gracias por la ...
  #1 (permalink)  
Antiguo 31/08/2011, 11:06
 
Fecha de Ingreso: septiembre-2005
Mensajes: 74
Antigüedad: 18 años, 6 meses
Puntos: 0
Sólo una instancia de un formulario.

Alguien sabe cómo puedo hacer para tener una instancia de un formulario que es un mdichild? Estoy usando c#.net con vs 2010.

Gracias por la ayuda.
  #2 (permalink)  
Antiguo 01/09/2011, 10:05
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 5 meses
Puntos: 8
Respuesta: Sólo una instancia de un formulario.

Que tal colega, te paso el codigo a tu pregunta, espero que te sea util y me des KARMA :)

En el formulario hijo declaras esto, frmFormulas es el nombre de tu pantalla
Código:
private static frmFormulas frmInstance = null;
Luego pones esto como metodo
Código:
        public static frmFormulas Instance()
        {
            if (((frmInstance == null) || (frmInstance.IsDisposed == true)))
            {
                frmInstance = new frmFormulas();
            }
            frmInstance.BringToFront();
            return frmInstance;
        }

entonces cuando abras tu formulario hijo desde el pare lo hace asi:
Código:
Declaras el formulario al abrir tu menu:
frmFormulas _frmFormulas = null;

Instancias el formulario
_frmFormulas = frmFormulas.Instance()

Lo abres:
_frmFormulas .MdiParent = this;
_frmFormulas .Show();
Lo que hara el metodo es que verifica si ya esta instanciada y si es asi ya no la instancia.

Y es todo! :)
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #3 (permalink)  
Antiguo 01/09/2011, 14:26
 
Fecha de Ingreso: agosto-2011
Ubicación: Buenos Aires
Mensajes: 78
Antigüedad: 12 años, 7 meses
Puntos: 10
Respuesta: Sólo una instancia de un formulario.

Me parece que en el caso de los formularios no conviene utilizar singleton (el patrón que muestra mvazquez). Porque cuando cierres el form vas a mantener la misma instancia al reabrirlo.

Sí no me equivoco estas buscando que el usuario no pueda abrir dos veces el mismo form. Tengo un ejemplo de una app en donde gestiono eso:

Código:
  if (usuariosToolStripMenuItem.Checked)
           _frmUsuarios.Close();
  else
  {
         _frmUsuarios = new FrmUsuarios(Manager);
         _frmUsuarios.FormClosed += new FormClosedEventHandler(frmUsuarios_FormClosed);
        _frmUsuarios.MdiParent = this;
        _frmUsuarios.Show();
   }

   usuariosToolStripMenuItem.Checked = !usuariosToolStripMenuItem.Checked;
El formulario principal tiene la instancia de _frmUsuarios, al hacer click sobre la opción del menú lo tildo, y en base a eso controlo si el usuario lo lanza solo una vez.

Te paso el link para que veas como funca:
http://www.orientadoanet.com/2011/08/c-programa-de-chat.html
__________________
www.orientadoanet.com
  #4 (permalink)  
Antiguo 01/09/2011, 16:24
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 5 meses
Puntos: 8
Respuesta: Sólo una instancia de un formulario.

laguzzigerardo.
Lo que estoy pasando es justamente para abrir solamente una vez el formulario.
Una vez abierto te mantiene la instancia, cuando lo cierras esa instancia se pierde y se va a GC, si lo vuelves a abrir crea nuevamente su nueva instancia.

No funciona como tú lo comentas, tengo alrededor de 100 formularios en un menú de y me funcionan a la perfección.
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #5 (permalink)  
Antiguo 25/02/2015, 17:41
 
Fecha de Ingreso: febrero-2015
Mensajes: 2
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Sólo una instancia de un formulario.

Este código lo tengo que implementar por cada formulario que tenga o hay alguna forma de adaptarlo para que funcione para N formularios.


Saludos...
  #6 (permalink)  
Antiguo 25/02/2015, 17:44
 
Fecha de Ingreso: febrero-2015
Mensajes: 2
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Sólo una instancia de un formulario.

Cita:
Iniciado por mvazquez Ver Mensaje
Que tal colega, te paso el codigo a tu pregunta, espero que te sea util y me des KARMA :)

En el formulario hijo declaras esto, frmFormulas es el nombre de tu pantalla
Código:
private static frmFormulas frmInstance = null;
Luego pones esto como metodo
Código:
        public static frmFormulas Instance()
        {
            if (((frmInstance == null) || (frmInstance.IsDisposed == true)))
            {
                frmInstance = new frmFormulas();
            }
            frmInstance.BringToFront();
            return frmInstance;
        }

entonces cuando abras tu formulario hijo desde el pare lo hace asi:
Código:
Declaras el formulario al abrir tu menu:
frmFormulas _frmFormulas = null;

Instancias el formulario
_frmFormulas = frmFormulas.Instance()

Lo abres:
_frmFormulas .MdiParent = this;
_frmFormulas .Show();
Lo que hara el metodo es que verifica si ya esta instanciada y si es asi ya no la instancia.

Y es todo! :)
Este código lo tengo que implementar por cada formulario que tenga o hay alguna forma de adaptarlo para que funcione para N formularios.

Saludos...

Etiquetas: instancia, net
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:41.