Colaboraciones en el Guille

Instancia única de Formularios

 

Fecha: 11/May/2006 (08 de Mayo 2006)
Autor: Alexander Concha - alex [at] buayacorp [dot] com

 


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;
		if (formulario == null || formulario.IsDisposed)
		{
			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.

 


Espacios de nombres usados en el código de este artículo:

System.Collections

 


Fichero con el código de ejemplo: xknown_1instanciaForms.zip - (11.5) KB

(MD5 checksum: 1270B733D503F9ADAA3EDF0F12064A2C)


ir al índice principal del Guille