Comunidad Gambas-es

Versión completa: Cambiar propiedad de un control en tiempo de ejecución
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
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.
...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.
(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.
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.
(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().