Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

[SOLUCIONADO]  Cambiar propiedad de un control en tiempo de ejecución
#1

Buenas tardes,
una pregunta, tengo unos controles a los que les quiero cambiar propiedades de visualización según el resultado de un Rand().
Esa operación de Rand me da parte del nombre del control, ahora bien una vez obtenido quiero poder acceder a ese control para hacerlo visible dinaḿicamente.
Ejemplo:

Tengo una label que tiene como nombre lbl01

bien el algoritmo de Rand(1,10) me da como reultado 1, yo le agrego el 0 al resultado para dejarlo en dos digitos, por tanto ya tengo el 01.
bien ahora me gustaría, sabiendo que tengo control que se llama lbl01, poder hacer un eval() o otra función para poder acabar haciendo al control un .visible=true.

Gracias.
    ¡Gracias!
#2

...quizás este simple ejemplo podría ayudar:

GAMBAS
  1. Public Sub Form_Open()
  2.  
  3.  
  4.   Me.Show
  5.   Wait 0.5
  6.  
  7.   lbl01.Visible = False
  8.   lbl01.Text = "1"
  9.   lbl02.Visible = False
  10.   lbl02.Text = "2"
  11.   lbl03.Visible = False
  12.   lbl03.Text = "3"
  13.   lbl04.Visible = False
  14.   lbl04.Text = "4"
  15.   lbl05.Visible = False
  16.   lbl05.Text = "5"
  17.   lbl06.Visible = False
  18.   lbl06.Text = "6"
  19.   lbl07.Visible = False
  20.   lbl07.Text = "7"
  21.   lbl08.Visible = False
  22.   lbl08.Text = "8"
  23.   lbl09.Visible = False
  24.   lbl09.Text = "9"
  25.   lbl10.Visible = False
  26.   lbl10.Text = "10"  
  27.  
  28.   Do
  29.     i = Rand(1, 10)
  30.    
  31.       Me.Children[i - 1].Visible = True
  32.    
  33.     Wait 1
  34.     Me.Children[i - 1].Visible = False
  35.   Loop
  36.  


Este simple ejemplo supone que las "Label" se coloquen en la Form una tras otra sin solución de continuidad, siguiendo el orden de numeración presente en su propio nombre.

"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)

"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
    ¡Gracias!
#3

(15-08-2020, 18:18)vuott escribió:  ...quizás este simple ejemplo podría ayudar:

GAMBAS
  1. Public Sub Form_Open()
  2.  
  3.  
  4.   Me.Show
  5.   Wait 0.5
  6.  
  7.   lbl01.Visible = False
  8.   lbl01.Text = "1"
  9.   lbl02.Visible = False
  10.   lbl02.Text = "2"
  11.   lbl03.Visible = False
  12.   lbl03.Text = "3"
  13.   lbl04.Visible = False
  14.   lbl04.Text = "4"
  15.   lbl05.Visible = False
  16.   lbl05.Text = "5"
  17.   lbl06.Visible = False
  18.   lbl06.Text = "6"
  19.   lbl07.Visible = False
  20.   lbl07.Text = "7"
  21.   lbl08.Visible = False
  22.   lbl08.Text = "8"
  23.   lbl09.Visible = False
  24.   lbl09.Text = "9"
  25.   lbl10.Visible = False
  26.   lbl10.Text = "10"  
  27.  
  28.   Do
  29.     i = Rand(1, 10)
  30.    
  31.       Me.Children[i - 1].Visible = True
  32.    
  33.     Wait 1
  34.     Me.Children[i - 1].Visible = False
  35.   Loop
  36.  


Este simple ejemplo supone que las "Label" se coloquen en la Form una tras otra sin solución de continuidad, siguiendo el orden de numeración presente en su propio nombre.

Muy interesante y útil, una consulta, y puedo acceder a los elementos de Children por el nombre en vez de por el indice?
Digamos que el Rand lo realizo antes, obtengo el número 01 y luego se que el nombre del objecto va a ser lbl01

Saludos.
    ¡Gracias!
#4

Hola Calcena.
Podes hacer esto
GAMBAS
  1. ' Gambas class file
  2.  
  3. Public Sub Button1_Click()
  4.  
  5.  
  6.   i = Rand(1, 5)
  7.  
  8.   For Each c In Me.Children
  9.     If Object.Type(c) = "Label" Then
  10.       If c.Name = "lbl" & Format(i, "00") Then
  11.         c.visible = True
  12.         c.Text = Format(i, "00")
  13.         Button1.Text = Format(i, "00")
  14.       Else
  15.         c.visible = False
  16.       Endif
  17.     Endif
  18.   Next


Saludos.


Archivos adjuntos
.gz ejemplo-me-controls-0.0.1.tar.gz Tamaño: 11.7 KB  Descargas: 0
    ¡Gracias!
#5

(15-08-2020, 18:46)calcena escribió:  Digamos que el Rand lo realizo antes, obtengo el número 01
La única manera de obtener el valor, devuelto por la función Rand(), precedido de un cero, es transformarlo en formato de cadena de dos caracteres.
Una manera simple y eficaz es la de tincho en su ejemplo, usando la función Format().

"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)

"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)