Reflexión y referenciar un control

06/06/2005 - 11:16 por JuanilloFox | Informe spam
Hola grupo,

Me han comentado que debo usar la reflexión para poder hacer referencia a un
control en tiempo de ejecución y acceder a sus propiedades para
introducirles valores o cambiar su estado...

La verdad es que no se como utilizarlo. Si alguien puede aportarme algo de
luz


Un saludo

juanillofox@andujar.com

Preguntas similare

Leer las respuestas

#6 Tristan
06/06/2005 - 21:34 | Informe spam
:-(

Juanillo. No necesitas reflection para hacer eso, creeme. Basta con que
pongas todos esos controles en un array. En el otro hilo te he puesto un
ejemplo de como hacerlo.

Pero es que además, en ese mismo mensaje también te expuse como puedes
utilizar reflection para acceder por su nombre al control. Solo tienes que
buscar un método al que llamé GetField().

¿Pero que parte es la que no entiendes?

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#7 Ciru
07/06/2005 - 09:53 | Informe spam
Hola JuanilloFox, yo tengo unos formularios en los cuales dentro de una
matriz englobo todos los controles contenidos en el, luego compruebo el tipo
de cada uno de ellos para segun el tipo active un evento distinto, y todo
ello sin utilizar la reflexion ni nada.



"JuanilloFox" escribió:

Hola Víctor,

El tema es un poco complejo. En un mensaje anterior expuse que tengo una
matriz extensa de controles (TextBox, Label) y tengo que hacer referencia a
ellos para introducirles valores en su propiedad Text y utilizar la
propiedad Enableb y Visible dependiendo de algunos factores.

El problema es, que hacer referencia a cada control directamente
"this.miControl.Text" resulta my engorroso y a la vez tedioso ya que es
bastante extenso (matriz de controles de 17x16).


Un saludo







Respuesta Responder a este mensaje
#8 Tristan
07/06/2005 - 16:32 | Informe spam
Me rindo :-(

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#9 JuanilloFox
08/06/2005 - 07:20 | Informe spam
Hola Tristan,

Me ha servido de gran ayuda tus comentarios, así que no te rindas.

Soy novato en C# y hay muchas cosas que no tengo claras y no controlo mucho.

Como bien dices, las variables utilizadas las puedo tomar como array y
acceder a ellas mediante bucles, pero a la hora de asignarlas a campos de
fichero, necesariamente las tengo que tratar una a una.

La rutina que he mandado me gustaría que si pudieses la comentaras ya que
existen cosas que se me escapan. Si entiendo que se mueve sobre dos métodos
principales ObtPropiedadEx() que obtiene el valor de la propiedad de un
objeto y SelPropiedadEx() que realiza la asignación de un valor a una
propiedad objeto.

Estoy ahora a punto de probarlas, espero que me sirvan y funcionen, por ese
motivo las he puesto en el foro.

Gracias por todo
Un saludo


Respuesta Responder a este mensaje
#10 Tristan
08/06/2005 - 17:02 | Informe spam
Como bien dices, las variables utilizadas las puedo tomar como array y
acceder a ellas mediante bucles, pero a la hora de asignarlas a campos de
fichero, necesariamente las tengo que tratar una a una.



Bueno, nada te impide utilizar los elementos de un Array uno a uno. No es
necesario tratarlos en un bucle.

¿Que diferencia hay entre?:

MessageBox.Show(TxtC1T2.Text)

y

MessageBox.Show(Txt[1,2].Text)

En todo caso, puedes mantener las dos cosas; la variable individual y el
elemento del array. Los dos apuntando al mismo objeto. No veo el problema.


La rutina que he mandado me gustaría que si pudieses la comentaras



Esa rutina para los efectos, hace lo mismo que uno de los ejemplos que te
puse: GetField llamé al método. Solo que mi ejemplo era de unas 4 o 5
lineas. Por supuesto esta rutina es mucho más completa, pero lo que añade no
me parece que te pueda servir para nada. En tu caso no necesitas acceder a
las propiedades utilizando reflection, puesto que conoces el tipo de
antemano. El tipo es un TextBox, o en el peor de los casos un Control.

Realmente me parecería una pena utilizar reflection para una cosa que se
resuelve tan fácilmente con arrays. En todo casi si decides hacerlo, al
menos no utilices las propiedades utilizando reflection, tal y como hace esa
rutina. Solo deberías utilizar el método GetField, que por cierto es
idéntico al GetField que yo te dejé. No necesitas nada más.

Pero como norma, lo que ya te dije. No se debe hacer en tiempo de ejecución
lo que puede hacerse en tiempo de compilación. La mejor opicón es el array.

Juan Carlos Badiola
MVP - C#
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida