String a objeto

09/05/2008 - 17:28 por Luis Tores | Informe spam
tengo el nombre de un objeto en una variable, como obtengo una referencia a
ese objeto.

ej.

String sObjeto="Form1.Button1";

no hay algo como:

Button boton=sObjeto.ToObject() ?

Preguntas similare

Leer las respuestas

#1 srellock
09/05/2008 - 17:57 | Informe spam
Prueba esto

System.Windows.Forms.Button b
=
(System.Windows.Forms.Button)this.Controls.Find("Button1",False)[0];

if (b==null)
MessageBox("No encontrado");
else
b.BackColor=Color.Red;




"Luis Tores" <lt...> escribió en el mensaje
news:%
tengo el nombre de un objeto en una variable, como obtengo una referencia
a
ese objeto.

ej.

String sObjeto="Form1.Button1";

no hay algo como:

Button boton=sObjeto.ToObject() ?



Respuesta Responder a este mensaje
#2 Alberto Poblacion
10/05/2008 - 10:08 | Informe spam
"Luis Tores" <lt...> wrote in message
news:%
tengo el nombre de un objeto en una variable, como obtengo una referencia
a
ese objeto.

ej.

String sObjeto="Form1.Button1";

no hay algo como:

Button boton=sObjeto.ToObject() ?



"Luis" <luistej3> wrote in message news:2984f402$7422fe42$
tengo el nombre de un objeto en una variable, como obtengo una referencia
a ese objeto.

ej.

String sObjeto="Form1.Button1";



OJO: Esa cadena no representa de forma unívoca un objeto. Entiendo que
"Button1" se refiere a una de las propiedades del Form1, que en su interior
tendrá un campo tal como "protected Button Button1;". El valor de esta
propiedad sí que se puede obtener a partir del string por medio de
Reflexión.

Pero para obtener ese valor, se necesita saber en cuál de las instancias
de la clase "Form1" está contenido el campo cuyo valor deseamos obtener. Y
creo que aquí está tu error: "Form1" no es un objeto, sino una _clase_ de
objetos, y en un momento dado puede haber múltiples instancias creadas de
objetos de esta clase. Si las haces visibles, en pantalla se verían como
varios copias del formulario todas visibles a la vez.

Por ejemplo, asi:
Form1 f_a = new Form1();
f_a.Show();
Form1 f_b = new Form1();
f_b.Show();

Ahora tenemos dos copias, f_a y f_b del Form1. Cuando dices
"Form1.Button1", ¿a cuál de los dos Button1 te refieres, al que está dentro
de f_a o al que está dentro de f_b?

Está claro que se necesita algo más de información para obtener el
objeto que símplemente la cadena "Form1.Button1". Hace falta disponer de la
variable f_a o la f_b. Eso sí, disponiendo de una de estas, sí que puedes
acceder a su objeto "Button1" a partir del string:

using System.Reflection;
...
String sObjeto="Button1";
Type t = f_a.GetType();
PropertyInfo pi = t.GetProperty(sObjeto,
BindingFlags.Public|BindingFlags.NonPublic);
Button boton = (Button)pi.GetValue(f_a, null);
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida