Enlaces e información
Comenta lo que creas oportuno.
Implementando un proveedor de formularios
En la lista: microsoft.public.es.dotnet.framework, AsierMM pregunto lo siguiente:
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
La mejor respuesta que se me ocurrió, la que yo implementaría fue la siguiente:
Suponte que tienes 2 formularios: frmCliente y frmProveedor. Creas un interfaz como el siguiente:
1 public interface IFormElement
2 {
3 string Nombre { get;}
4 Form ObtenerFormulario();
5 }
Escribes una implementacion del interfaz para cada formulario:
1 public class FormClienteElement : IFormElement
2 {
3 public string Nombre
4 {
5 get { return “frmCliente”; }
6 }
7
8 public Form ObtenerFormulario()
9 {
10 return new frmCliente;
11 }
12 }
13
14 public class FormProveedorElement : IFormElement
15 {
16 public string Nombre
17 {
18 get { return “frmProveedor”; }
19 }
20
21 public Form ObtenerFormulario()
22 {
23 return new frmProveedor;
24 }
25 }
y creas una clase Factoria que mantiene una lista de los IFormElement y busca el que quieres:
1 public class FormElementFactory
2 {
3 public static IList<IFormElement> TodosLosFormularios()
4 {
5 IList<IFormElement> objLista = new List<IFormElement>();
6 objLista.Add(new FormClienteElement());
7 objLista.Add(new FormProveedorElement());
8 return objLista;
9 }
10
11
12 public static Form GetFormulario(string strNombreFormulario)
13 {
14 foreach (IFormElement formElement in TodosLosFormularios)
15 {
16 if (formElement.Nombre == strNombreFormulario)
17 return formElement.ObtenerFormulario();
18 }
19 return null;
20 }
21 }
Cuando quieras obtener un formulario solo tienes que hacer como sigue:
1 frmCliente frm = (frmCliente)FormElementFactory.GetFormulario(“frmCliente”);
o:
1 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).
Esto viene de un post que puse hace unos dias confesando mi odio a los multiples switch.