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:
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.
3 replies on “Instancia única de Formularios”
Ese codigo te lo robaste del website del Guille.
Hola, no te refieres al mismo artículo que puse en el Guille no? 😀
Saludos
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