Foros del Web » Programación para mayores de 30 ;) » .NET »

Asignar a un string propiedades de un objeto

Estas en el tema de Asignar a un string propiedades de un objeto en el foro de .NET en Foros del Web. Hola a todos! pues me acaba de surgir una duda, a ver si me podéis ayudar... Imaginaros que tengo un Button, y lo quiero activar ...
  #1 (permalink)  
Antiguo 23/09/2009, 04:41
 
Fecha de Ingreso: septiembre-2009
Ubicación: Galicia
Mensajes: 111
Antigüedad: 14 años, 8 meses
Puntos: 3
Asignar a un string propiedades de un objeto

Hola a todos!

pues me acaba de surgir una duda, a ver si me podéis ayudar...

Imaginaros que tengo un Button, y lo quiero activar y cambiarle el color. Sería algo como esto:

Button1.Enabled = True
Button1.BackColor = Color.Beige


Ahora imaginaros que tengo una variable string con el nombre del boton. La idea sería poder hacer lo mismo (activar y cambiar el color) pero usando esa variable:
Dim a As String = "Button1"

a.Enabled = True

a.BackColor = Color.Beige


Esto evidentemente me da error, porque las propiedades "Enabled" y "BackColor" son del objeto button, no del string. ¿Pero se podría hacer de alguna manera lo que quiero? Esto me podría ser útil si tengo guardada en una base de datos los botones de un formulario que tengo que activar y desactivar, algo como esto:

Código:
Boton    -    Activo
-----------------------
button1        Si
button2        Si
button3        No
button4        Si
La manera de hacerlo sería recorrer con un dataset esos registros e ir dándole a cada botón la propiedad correspondiente. Pero al recorrer el dataset tengo strings, no botones.

Dicho de otra manera, ¿que puedo hacer para que un string tenga las propiedades del objeto al que hace referencia su nombre?

No sé si me he explicado bien....

Bueno, pues un saludo y gracias anticipadas!!!
  #2 (permalink)  
Antiguo 23/09/2009, 05:51
 
Fecha de Ingreso: enero-2008
Mensajes: 268
Antigüedad: 16 años, 4 meses
Puntos: 11
Respuesta: Asignar a un string propiedades de un objeto

Hola jarogo.
A decir verdad no sé yo si puedes hacer lo qeu deseas. Primero, porque nunca podrás asignar un botón a un string.
Ahora bien, lo que sí puedes hacer es en vez de crearte un string, te creas un objeto, y luego haces un casting de ese objeto con un ctype.

Algo asi.

dim a as object
a.name = "boton"
ctype(a, button).propiedades (fiajete bien porque no recuerdo si la sintaxis esta es la correcta)

de ese modo le dices qeu a es un objeto que es un boton, y lo puedes tratar como tal.

A ver si asi te vale. ya nso cuentas
saludos
  #3 (permalink)  
Antiguo 23/09/2009, 13:47
Avatar de jose_d  
Fecha de Ingreso: enero-2003
Ubicación: Cali
Mensajes: 220
Antigüedad: 21 años, 3 meses
Puntos: 4
Respuesta: Asignar a un string propiedades de un objeto

Eso se puede hacer con generics cosa fabulosa que trajo c# 2005.

Código:
public void Habilitar<T>(T Boton,bool habilitado,Color color)where T:System.Windows.Forms.Button
{
            Boton.BackColor = color;
            Boton.Enabled = habilitado;
}
esta es la funcion y lo que haces es llamarlo asi.

Código:
Habilitar<System.Windows.Forms.Button>(((System.Windows.Forms.Button)this.Controls.Find("button1", true)[0]), true, Color.Black);
me contas si te sirve.
l
__________________
El leer te da el poder de mejorar

Última edición por jose_d; 23/09/2009 a las 13:57
  #4 (permalink)  
Antiguo 24/09/2009, 08:09
 
Fecha de Ingreso: septiembre-2009
Ubicación: Galicia
Mensajes: 111
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Asignar a un string propiedades de un objeto

Hola!

Antes de nada gracias por las respuestas.

Efectivamente, esa es una solución para localizar un objeto: localizar el control comparando por el nombre. Ya lo probé y funciona sin problemas.

Pero ahora imaginaros que en vez de un button es una función:

Sub Prueba()
Msgbox "Hola"
End Sub

Para llamarla, en vez de un
Prueba()

tengo un string:
dim a as string = "Prueba()"


¿Se podría esto?

Saludos!
  #5 (permalink)  
Antiguo 25/09/2009, 01:04
 
Fecha de Ingreso: enero-2008
Mensajes: 268
Antigüedad: 16 años, 4 meses
Puntos: 11
Respuesta: Asignar a un string propiedades de un objeto

Hola jarogo. A decir verdad no me ha quedado muy claro qué es lo que quieres conseguir.
Más que nada porque no entiendo la pretensión de usar el string y no la funcion.

podías explicarlo un poquito por favor, a ver si de esa forma lo entiendo y te puedo echar una mano.
  #6 (permalink)  
Antiguo 28/09/2009, 03:55
 
Fecha de Ingreso: septiembre-2009
Ubicación: Galicia
Mensajes: 111
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Asignar a un string propiedades de un objeto

Hola, javi_cassi!

El problema que tengo es que la función a la que tengo que llamar la obtengo de una base de datos. Imagínate: pulso un boton y hago una consulta a la base de datos. Entonces obtengo que la funcion a la que quiero llamar es "Prueba1()". Pero este valor lo tengo en un string.

Quiero evitar esto:

Código:
Button_Click

valor = retorno de la consulta

If valor = "Prueba1()" then Prueba1() EndIf   'y me va a la funcion Prueba1

If valor = "Prueba2()" then Prueba2() EndIf   'y me va a la funcion Prueba2

If valor = "Prueba3()" then Prueba3() EndIf   'y me va a la funcion Prueba3
Lo ideal sería lo siguiente:
Código:
Button_Click

valor = retorno de la consulta
valor()  'y que me vaya a la funcion correspondiente
Esto me es útil tambien porque si necesito una nueva función, no tengo que modificar el evento click del boton con un caso, tendría una línea de código tanto si huebiera una función como si hubiera 1000 (mientras que de la otra manera tendría que hacer 1000 if)

No se si me expliqué bien ahora...
  #7 (permalink)  
Antiguo 28/09/2009, 04:34
 
Fecha de Ingreso: enero-2008
Mensajes: 268
Antigüedad: 16 años, 4 meses
Puntos: 11
Respuesta: Asignar a un string propiedades de un objeto

Hola jarogo.
Ahora te has explicado perfectamente.

De primeras se me ocurre una cosa bien sencilla que no se si se te habrá ocurrido.
La cosa sería crearte una función que fuese:

private sub BUSCAR_FUNCION (nombre_funcion as string)
{
--Y en esta función haces lo que comentas de
if nombre_funcion = "funcion_suma" then
funcion_suma()
elseif nombre_funcion = "funcion_resta" then
funcion_resta
end if;
.
.
.
}

Como te digo es una solucion para que no tengas que hacer la compracion 1000 veces. Si creas una nueva funcion, tendras que darla de alta en la bbdd, y luego añadirla a los if´s de la funcion BUSCR_FUNCIOn. De manera que sólo lo tendras que hacer una vez y no 1000.



la otra cosa qeu se me ocurre es que es que puedes añadir un handler al string, pero claro, tendrás que hacer la pregunta de todas formas para sasber a qué hahndler se lo asignas.

Así que la solucion que se me ocurre es la que te comento. Creeart una funcuion a la que llamas desde la recogida de datos de bbdd, y quwe esa funcion sea la que ejecute lass funciones procedentes de bbdd.



Espero haberte ayudado

Ya nos cuentas

saludos
  #8 (permalink)  
Antiguo 28/09/2009, 05:29
 
Fecha de Ingreso: septiembre-2009
Ubicación: Galicia
Mensajes: 111
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Asignar a un string propiedades de un objeto

Hola!

efectivamente, sería una solución... que es precisamente lo que quiero evitar, jeje

El problema es que este código forma parte de una dll, la cual debe ser "codigo cerrado". Por lo que si añado una nueva funcionalidad, no quería tocar esa libreria (de la manera que dices tu tendría que añadir un nuevo if). De ahí mi empeño de que llame a la función en tiempo de ejecución, no por codigo programándolo yo.

Saludos y gracias de todas maneras!!
  #9 (permalink)  
Antiguo 28/09/2009, 07:19
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: Asignar a un string propiedades de un objeto

ok si se puede como tu quieres usando Reflection

Type
MethodInfo
ConstructorInfo
PropertyInfo

investiga sobre como crear una instancia pasando el nombre del tipo y el metodo a invocar (hace no mucho alguien en este mismo foro pidio lo mismo)

pero si se puede.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #10 (permalink)  
Antiguo 28/09/2009, 07:58
 
Fecha de Ingreso: septiembre-2009
Ubicación: Galicia
Mensajes: 111
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Asignar a un string propiedades de un objeto

Gracias, Peterpay!

investigaré y lo que encuentre ya lo pongo por aqui!

Saludos!
  #11 (permalink)  
Antiguo 29/09/2009, 13:48
Avatar de jose_d  
Fecha de Ingreso: enero-2003
Ubicación: Cali
Mensajes: 220
Antigüedad: 21 años, 3 meses
Puntos: 4
Respuesta: Asignar a un string propiedades de un objeto

Buscate coleccion y el metodo Func(T,TResult) mira este es un enlace Func

espero te sirva
__________________
El leer te da el poder de mejorar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:30.