Autor |
Mensaje |
pantitas
Usuario
Registrado: Marzo 2012
Mensajes: 9
Edad: 56
|
Referencia A Objeto Con El Nombre En Una Cadena....
Solo eso, tengo en una variable tipo string el nombre de un objeto (un boton), creado en tiempo de diseño.
y quiero cambiar la propiedad texto del mismo, (ojo, el objeto NO genera el evento, sino un proceso externo),
si me dan una mano lo agradeceria, probe con todo lo que se me ocurrio, y debo haber saltado algo basico
gracias
|
#1 Miercoles, 30 Octobre 2013, 20:18 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Referencia A Objeto Con El Nombre En Una Cadena....
Sería interesante que mostraras tu código para ver qué puede estar fallando. Lo que dices es posible hacerlo sin problemas, pero seguramente no estás guardando una referencia a ese objeto creado en tiempo de ejecución. Con ello me refiero a que deberías de almacenarlo en una variable a nivel de clase, o si son varios objetos, un array de dichos objetos también visible a nivel de clase.
También suele ser buena práctica, si el programa es muy grande, aislar la parte del código que da problemas en un miniprograma que sea funcional a pequeña escala. La mayoría de las veces, descubriremos por nosotros mismos el error tras esa práctica. Puede que no sea tu caso, pero me pareció oportuno comentarlo.
Saludos
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#2 Miercoles, 30 Octobre 2013, 21:32 |
|
|
pantitas
Usuario
Registrado: Marzo 2012
Mensajes: 9
Edad: 56
|
Re: Referencia A Objeto Con El Nombre En Una Cadena....
Primero muchas gracias por responder,
lo que incruste en el codigo es lo siguiente
dim s as string
s="M1" // M1 es la propiedad Name del boton en cuestion para hacer la prueba
Me.Controls[s].Visible=true // Aqui funciona
Me.Controls[s].Text="123456" //Y esto no
Me da idea como que la propiedad text no esta disponible en la clase controles, pero no se como habilitarla
|
#3 Miercoles, 30 Octobre 2013, 21:59 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Referencia A Objeto Con El Nombre En Una Cadena....
Ahí lo que falla es la clase. Estás manipulando una clase que tiene propiedad visible y no tiene propiedad text. Dado que la clase button sí tiene ambas, habría que ver esa declaración del botón cómo está hecha. Explora la instancia creada. Lo mismo crees que es un botón y resulta que es otra cosa.
|
#4 Miercoles, 30 Octobre 2013, 22:33 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Referencia A Objeto Con El Nombre En Una Cadena....
Efectivamente parece que no es posible acceder a la propiedad Text de un control de la manera que dices. Aunque la sintaxis es totalmente válida, creo que la razón por la que gambas no lo permite es porque no todos los controles tienen la propiedad Text, o Value, por citar otra...
La forma de hacerlo podría ser la siguiente:
'Declaramos el botón para crearlo en tiempo de ejecución
Private miboton As Button
Public Sub Form_Open()
'instanciamos un nuevo botón y declaramos
'el nombre del manejador de eventos con As "miboton"
miboton = New Button(Me) As "miboton"
' inicializamos algunas propiedades
With miboton
.X = 50
.Y = 50
.Width = 200
.Height = 24
.Text = "Mi boton"
End With
End
'declaramos el manejador de eventos del botón
Public Sub miboton_Click()
'el código que vaya aquí se ejecutará
'el pulsar el botón
message.Info("Has pulsado mi botón", "Aceptar")
End
' este botón se ha creado en tiempo de diseño
' para poder probar el otro creado en tiempo de ejecución
Public Sub Button1_Click()
'nos referimos al botón por su nombre de objeto
miboton.Text = "Cambiamos el texto"
'Parece que la forma que propones, aunque debería de ser válida
'no funciona porque no existe la propiedad Text en la clase Control
'
'Me.Controls["miboton"].Text = "Esto producirá un error"
End
Espero haber despejado alguna duda, saludos!
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#5 Miercoles, 30 Octobre 2013, 22:36 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Referencia A Objeto Con El Nombre En Una Cadena....
A lo mejor tambien te puede valer hacer una comprobacion previa para saber si es un boton el objeto:
Saludos
Referencia en el gambasdoc: Enlace
última edición por jsbsan el Jueves, 31 Octobre 2013, 11:15; editado 2 veces
|
#6 Jueves, 31 Octobre 2013, 11:14 |
|
|
pantitas
Usuario
Registrado: Marzo 2012
Mensajes: 9
Edad: 56
|
Re: Referencia A Objeto Con El Nombre En Una Cadena....
Muchas Gracias a todos, es verdad, la propiedad text no se puede modificar de esta forma tube que cambiar el algoritmo para solucionarlo, se pierde un poco de velocidad, pero no es critico en el proyecto
gracias de nuevo
|
#7 Jueves, 31 Octobre 2013, 14:42 |
|
|
pantitas
Usuario
Registrado: Marzo 2012
Mensajes: 9
Edad: 56
|
Re: Referencia A Objeto Con El Nombre En Una Cadena....
Termine haciendolo asi:
PUBLIC SUB Form_Open()
DIM Rs AS Result
DIM i AS Integer
DIM t AS Integer
bd.host = "192.168.2.110"
bd.login = "jorge"
bd.Password = "1234"
bd.type = "mysql"
bd.name = "Backup"
bd.Open
Rs = bd.Exec("SELECT * FROM Mapa WHERE T='M'")
FOR t = 1 TO Rs.Count
FOR i = 0 TO ME.Children.Count - 1
IF ME.Children[i].Name = Rs!Codigo THEN ME.Children[i].Tag = Rs!ID
NEXT
Rs.MoveNext
NEXT
M1.Text = M1.Tag
M2.Text = M2.Tag
M3.Text = M3.Tag
M4.Text = M4.Tag
M5.Text = M5.Tag
...
M56.Text=M56.Tag
END
Pero no lo veo "Prolijo"
Saludos
|
#8 Jueves, 31 Octobre 2013, 15:02 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Referencia A Objeto Con El Nombre En Una Cadena....
Sigo pensando que el problema está en la creación de eso M1... M56. Sube el código de cómo lo haces.
|
#9 Jueves, 31 Octobre 2013, 17:06 |
|
|
pantitas
Usuario
Registrado: Marzo 2012
Mensajes: 9
Edad: 56
|
Re: Referencia A Objeto Con El Nombre En Una Cadena....
Shordi, ese es justamente el punto, no son creados en tiempo de ejecucion sino en diseño, en tiempo de ejecucion no se presenta el problema...
Jorge
|
#10 Jueves, 31 Octobre 2013, 18:24 |
|
|
|