System.Reflection

11/08/2004 - 20:50 por Jose Antonio | Informe spam
Tengo un formulario con un control TextBox y quiero acceder a las
propiedades del TextBox por medio de Reflection.



Type t=Formulario.GetType();

System.Reflection.FieldInfo m=t.GetField("textBox1");

System.Reflection.PropertyInfo p=m.FieldType.GetProperty("Text");

// Hasta aqui todo bien m tienen la informacón correcta y p tambien

Al intentar coger el valor de la propiedad Text de textBox1 me salta una
excepcion de TargerException

object o=p.GetValue(m.FieldType,null),

tambien he probado con

object o=p.GetValue(t,null);

¿Alguna sugerencia?



Saludos y gracias.

Preguntas similare

Leer las respuestas

#6 Octavio Hernandez
12/08/2004 - 22:35 | Informe spam
Qué tal, Rodrigo! Siempre un placer poder saludarte...
Creo que todavía mejor quedaría:

Control c = this.Controls.Find("textBox1", true)[0];

dado que se trata de controles, como dice Jose Antonio.

Las vacaciones - ¿ya o todavía?

Un abrazo - Octavio

"Rodrigo Corral [MVP]" escribió en el mensaje
news:
Mostrar la cita
#7 Octavio Hernandez
12/08/2004 - 22:38 | Informe spam
JA,

Lo que tengo instalado aquí es la beta de VS2005, a ver si se trata de un
método que no existe en .NET 1.1...
En todo caso, podrías programar la función, recorriendo la colección de
controles y buscando el que tenga el nombre adecuado...

Salu2 - Octavio

"Jose Antonio" escribió en el mensaje
news:OgH$
Mostrar la cita
definición
Mostrar la cita
#8 Javier Ros
13/08/2004 - 09:25 | Informe spam
No, creo estar seguro de que en VS2003 no se puede referenciar un objeto
por el nombre. Estuve buscando esa posibilidad hace tiempo y no la encontré,
al verlo en este thread me sorprendio. A no ser que sea usando reflexión,
creo
que la funcion Find(string ComponentName, ...) no existe.

Saludos,


Javier Ros Moreno
Aguas de Murcia
Murcia (España)


"Octavio Hernandez" escribió en el mensaje
news:%
Mostrar la cita
mensaje
Mostrar la cita
#9 Octavio Hernandez
15/08/2004 - 10:52 | Informe spam
Javier,

Esto funciona perfectamente en VS2003:

for (int i = 0; i < Controls.Count; i ++)
if (Controls[i].Name == "button1") // el control que te interese
MessageBox.Show("Localizado!");

Slds,

Octavio

"Javier Ros" $PAMHEREemuasa.es> escribió en el mensaje
news:
Mostrar la cita
encontré,
Mostrar la cita
un
Mostrar la cita
#10 Pedro Luna Montalvo \(MVP\)
18/08/2004 - 17:00 | Informe spam
Esto funciona, claro, siempre y cuando el control esta a nivel de Form
Si se encuentra dentro de un GroupBox o un Panel.no lo encuentra,
cierto? ;)

Te incluyo una alternativa al FindControl().

private Control FindControl(Control.ControlCollection controls, string
controlName) {
foreach(Control control in controls) {
if (control.Name == controlName) {
return control;
}

Control childControl = this.FindControl(control.Controls,
controlName);
if (childControl != null) {
return childControl;
}
}
return null;
}

private Control FindControl(string controlName) {
return this.FindControl(this.Controls, controlName);
}


Agrega estos dos metodos en tu formulario, y puedes invocar:

this.FindControl("textBox1") para recuperar el Control.


Saludos
Pedro Luna, MVP
Gye, Ecu

"Octavio Hernandez" escribió en el mensaje
news:%
Mostrar la cita
objeto
Mostrar la cita
reflexión,
Mostrar la cita
de
Mostrar la cita
propositos,
Mostrar la cita
Ads by Google
Search Busqueda sugerida