Anuncia aquí

Instancia única de Formularios

Generalmente al trabajar con aplicaciones que tengan formularios MDI, se requiere que sólo exista una instancia de un formulario a la vez, si bien es cierto que ésto se puede lograr usando el patrón Singleton, esta forma de hacerlo se dificulta al tener una cantidad considerable de formularios hijos.

A continuación se muestra un método genérico para tener sólo una instancia por formulario:

csharp:
public Hashtable instancias = new Hashtable();

public Form AbrirVentana(Type tipo)
{
        return AbrirVentana(tipo.FullName);
}

public Form AbrirVentana(string tipo)
{
        try
        {
                Form formulario = instancias[tipo] as Form; // Recuperar la instancia, si existe
                if (formulario == null || formulario.IsDisposed)
                {
                        // Usar Reflection para crear una instancia
                        formulario = (Form)Activator.CreateInstance(null, tipo).Unwrap();
                        instancias[tipo] = formulario;
                }
                if (this.IsMdiContainer)
                        formulario.MdiParent = this;

                formulario.Activate();
                formulario.WindowState = FormWindowState.Normal;
                formulario.Show();
                return formulario;
        }
        catch (Exception ex)
        {
                // Procesar el error
                throw ex; // return null;
        }
}

Al código mostrado arriba falta hacerle unas cuantas modificaciones para darle un poco más de flexibilidad (puesto que sólo se basa en el tipo), pero para empezar creo que está bien.

Archivos Relacionados

Esta entrada fue publicada en .NET

3 Comentarios

  1. 1 gdyrdev (8 de junio de 2006, 03:58:00 pm)

    Ese codigo te lo robaste del website del Guille.

  2. 2 alex (8 de junio de 2006, 04:35:55 pm)

    Hola, no te refieres al mismo artículo que puse en el Guille no? :D

    Saludos

  3. 3 Manuel (14 de abril de 2009, 02:14:48 pm)

    Podrias explicar que se le envia al invocar el metodo AbrirVentana() a que se refiere con (Type tipo) y donde es donde se instancia el formulario.

    Gracias

Publicar un Comentario

Tu email nunca será publicado o compartido. Los campos requeridos están marcados con un *

*
*

Puedes usar estas etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>