Acceso a FieldInfo. Reflexión

27/02/2004 - 10:37 por Alberto Anta | Informe spam
Hola, tengo esta clase

public class A: System.Windows.Forms.Form
{

private TextBox tb;
más codigo
}

El caso que por reflexión hago algo así

Type t= Type de la clase A (typeof(A))

t.GetFields => obtengo los Fields de la clase A

En este punto quisiera por ejemplo, establecer la
propiedad Visible a false del Textbox tb. Cómo se haría
en tiempo de ejecución.

Es decir, quisiera un método genérico que a partir de

FieldInfo fi, string propiedad, object valor

pudiera establecer valores a las propiedades de esos
Fields.

Ej:

FieldInfo fi, string propiedad, object valor

FieldInfo del TextBox tb, "Visible", false


Alguna sugerencia ? Es posible hacerlo en tiempo de
ejecución ?.

Gracias.
 

Leer las respuestas

#1 pablo_crosio
27/02/2004 - 15:39 | Informe spam
Hola

Lo que necesitas se puede hacer el tema es que para armar tu metodo
generico deberias pasarle la instancia del objeto en cuestion (el TextBox
en tu caso) en vez de la instancia del objeto FieldInfo; esto debe ser asi
ya que FieldInfo ofrece informacion del campo de un tipo, pero no se
refiere a una instancia en concreto de este tipo; y vos justamente queres
trabajar con datos de una instancia

Aca te paso un ejemplo, espero te sirva:


using System;
using System.Windows.Forms;
using System.Reflection;

public class refl
{

public static void Main(string[] args)
{

A a = new A();

object o_instancia;

a.tb = new TextBox();

Type t = Type.GetType("A");

foreach(FieldInfo f in t.GetFields())
{
// se obtiene la instancia del TextBox que contiene "a"
o_instancia = f.GetValue(a);

Console.WriteLine("propiedad antes: {0}", leerProp(o_instancia,
"Visible"));

asignarProp(o_instancia, "Visible", false);

Console.WriteLine("propiedad luego: {0}", leerProp(o_instancia,
"Visible"));
}

}

public static object leerProp(object o_instancia, string nombre_prop)
{
PropertyInfo pi = o_instancia.GetType().GetProperty(nombre_prop);
return pi.GetValue(o_instancia, null);
}

public static void asignarProp(object o_instancia, string nombre_prop,
object valor)
{
PropertyInfo pi = o_instancia.GetType().GetProperty(nombre_prop);
pi.SetValue(o_instancia, valor, null);
}
}

public class A: Form

{
public TextBox tb;
}

Por cualquier duda podes consultar por la clase PropertyInfo y sus
metodos

Salu2!!

Pablo



Alberto Anta wrote:

Hola, tengo esta clase

public class A: System.Windows.Forms.Form
{

private TextBox tb;
.más codigo
}

El caso que por reflexión hago algo así

Type t= Type de la clase A (typeof(A))

t.GetFields => obtengo los Fields de la clase A

En este punto quisiera por ejemplo, establecer la
propiedad Visible a false del Textbox tb. Cómo se haría
en tiempo de ejecución.

Es decir, quisiera un método genérico que a partir de

FieldInfo fi, string propiedad, object valor

pudiera establecer valores a las propiedades de esos
Fields.

Ej:

FieldInfo fi, string propiedad, object valor

FieldInfo del TextBox tb, "Visible", false


Alguna sugerencia ? Es posible hacerlo en tiempo de
ejecución ?.

Gracias.

Preguntas similares