Abrir formularios solo conociendo su nombre

22/09/2006 - 10:32 por AsierMM | Informe spam
Hola tengo muchas formularios en mi proyecto y una funcion que los abre.
Por parametro recivire su nombre y me gustaria saber una forma de hacer un
new de ese informe pero de una forma que no tenga que hacer un case y hacer
su new.
La idea es tener un new unico para todos los formularios.
Yo estaba pensando en si existia una funcion estilo a la Eval de JavaScript
que me permitiese evaluar el "new 'Nombre de informe' "
Bueno cualquier idea sera bien recivida. Muchas gracias a todos
 

Leer las respuestas

#1 floyd303
22/09/2006 - 11:36 | Informe spam
Hola!

Esto se puede hacer por reflexion, lo que pasa es que ahora mismo no
tengo el codigo,

Pero lo que quieres hacer tambien se puede hacer con un patron Factory:
Suponte que tienes 2 formularios: frmCliente y frmProveedor.

Creas un interfaz como el siguiente:

public interface IFormElement
{
string Nombre { get;}
Form ObtenerFormulario();
}

Escribes una implementacion del interfaz para cada formulario:

public class FormClienteElement : IFormElement
{
public string Nombre
{
get { return "frmCliente"; }
}

public Form ObtenerFormulario()
{
return new frmCliente;
}
}

public class FormProveedorElement : IFormElement
{
public string Nombre
{
get { return "frmProveedor"; }
}

public Form ObtenerFormulario()
{
return new frmProveedor;
}
}

y creas una clase Factoria que mantiene una lista de los IFormElement y
busca el que quieres:

public class FormElementFactory
{
public static IList<IFormElement> TodosLosFormularios()
{
IList<IFormElement> objLista = new List<IFormElement>();
objLista.Add(new FormClienteElement());
objLista.Add(new FormProveedorElement());
return objLista;
}


public static Form GetFormulario(string strNombreFormulario)
{
foreach (IFormElement formElement in TodosLosFormularios)
{
if (formElement.Nombre == strNombreFormulario)
return formElement.ObtenerFormulario();
}
return null;
}
}

Cuando quieras obtener un formulario solo tienes que hacer como sigue:

frmCliente frm = (frmCliente)
FormElementFactory.GetFormulario("frmCliente");

o:

frmProveedor frm = (frmProveedor)
FormElementFactory.GetFormulario("frmProveedor");

Cuando quieras añadir un nuevo formulario a esta factoria, solo tienes
que crear una implementacion del IFormElement (2 lineas de codigo no
automatico) y añadir el elemento a la lista de la factoria (1 linea de
codigo).

Espero que te ayude
Saludos
Roberto M. Oliva





AsierMM ha escrito:

Hola tengo muchas formularios en mi proyecto y una funcion que los abre.
Por parametro recivire su nombre y me gustaria saber una forma de hacer un
new de ese informe pero de una forma que no tenga que hacer un case y hacer
su new.
La idea es tener un new unico para todos los formularios.
Yo estaba pensando en si existia una funcion estilo a la Eval de JavaScript
que me permitiese evaluar el "new 'Nombre de informe' "
Bueno cualquier idea sera bien recivida. Muchas gracias a todos

Preguntas similares