Generar código en tiempo de ejecución

14/11/2005 - 18:56 por José Luis | Informe spam
Hola a todos.

Tengo una aplicación que carga su configuración a partir de un fichero XML,
pero quiero mejorar un poco el sistema y hacerlo algo más inteligente de la
siguiente manera:
- Leo del archivo XML el nombre de determinados controles que estarán
definidos en el formulario.
- Para cada uno de estos controles, leo los nombres de las propiedades
que quiero modificar
- Para cada una de las propiedades, leo su valor.

Un ejemplo de archivo XML

<control Type="TextBox" Name="tbNombre">
<property Name="Text" Type="string" Value="Hola Mundo"></property>
<property Name="Visible" Type="bool" Value="true"></property>
</control>

Mi código C#, a partir de este XML monta las siguientes instrucciones
C#:

TextBox tbNombre; //Definido en el diseño del formulario
[...]
tbNombre.Text="Hola Mundo";
tbNombre.Visible=true;

Pero... ¿Existe alguna manera de que pueda ejecutar este código de
manera dinámica?¿Puedo hacer esto con reflection?¿Cómo?¿Teniendo en cuenta
que se tiene que ejecutar interactuando con los objetos de mi entorno de
ejecución actual?


Necesito vuestra ayuda.
Gracias
 

Leer las respuestas

#1 A.Poblacion
15/11/2005 - 08:36 | Informe spam
"José Luis" wrote in message
news:
[...]
Mi código C#, a partir de este XML monta las siguientes instrucciones
C#:

TextBox tbNombre; //Definido en el diseño del formulario
[...]
tbNombre.Text="Hola Mundo";
tbNombre.Visible=true;

Pero... ¿Existe alguna manera de que pueda ejecutar este código de
manera dinámica?¿Puedo hacer esto con reflection?¿Cómo?¿Teniendo en cuenta
que se tiene que ejecutar interactuando con los objetos de mi entorno de
ejecución actual?



Se puede hacer con reflexión, pero probablemente no te haga falta. Si el
número de controles que usas es limitado (por ejemplo, si solo tienes
textboxes y labels) solo tienes que hacer los "new" dentro de un bucle,
asignarles propiedades, y agregar los nuevos controles a la colección
Controls del Form:

while (leer_control_del_xml)
{
switch (tipo_de_control)
{
case "TextBox":
TextBox t = new TextBox();
t.Text = Valor_leido_del_xml;
...(otras propiedades)...
this.Controls.Add(t);
break;
casel "Label";
Label l = new Label();
l.Text = Valor_leido_del_xml;
...
this.Controls.Add(l);
break;
}
}

Preguntas similares