Comunidad Gambas-es
[SOLUCIONADO] Cambiar propiedad de un control en tiempo de ejecución - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: General (https://gambas-es.org/forum-4.html)
+--- Tema: [SOLUCIONADO] Cambiar propiedad de un control en tiempo de ejecución (/thread-72.html)



Cambiar propiedad de un control en tiempo de ejecución - calcena - 15-08-2020

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.


RE: Cambiar propiedad de un control en tiempo de ejecución - vuott - 15-08-2020

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

Código:
Public Sub Form_Open()

  Dim i As Integer
 
  Me.Show
  Wait 0.5
 
  lbl01.Visible = False
  lbl01.Text = "1"
  lbl02.Visible = False
  lbl02.Text = "2"
  lbl03.Visible = False
  lbl03.Text = "3"
  lbl04.Visible = False
  lbl04.Text = "4"
  lbl05.Visible = False
  lbl05.Text = "5"
  lbl06.Visible = False
  lbl06.Text = "6"
  lbl07.Visible = False
  lbl07.Text = "7"
  lbl08.Visible = False
  lbl08.Text = "8"
  lbl09.Visible = False
  lbl09.Text = "9"
  lbl10.Visible = False
  lbl10.Text = "10"  

  Do
    i = Rand(1, 10)
   
      Me.Children[i - 1].Visible = True
   
    Wait 1
    Me.Children[i - 1].Visible = False
  Loop

End
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.


RE: Cambiar propiedad de un control en tiempo de ejecución - calcena - 15-08-2020

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

Código:
Public Sub Form_Open()

  Dim i As Integer
 
  Me.Show
  Wait 0.5
 
  lbl01.Visible = False
  lbl01.Text = "1"
  lbl02.Visible = False
  lbl02.Text = "2"
  lbl03.Visible = False
  lbl03.Text = "3"
  lbl04.Visible = False
  lbl04.Text = "4"
  lbl05.Visible = False
  lbl05.Text = "5"
  lbl06.Visible = False
  lbl06.Text = "6"
  lbl07.Visible = False
  lbl07.Text = "7"
  lbl08.Visible = False
  lbl08.Text = "8"
  lbl09.Visible = False
  lbl09.Text = "9"
  lbl10.Visible = False
  lbl10.Text = "10"  

  Do
    i = Rand(1, 10)
   
      Me.Children[i - 1].Visible = True
   
    Wait 1
    Me.Children[i - 1].Visible = False
  Loop

End
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.


RE: Cambiar propiedad de un control en tiempo de ejecución - tincho - 15-08-2020

Hola Calcena.
Podes hacer esto
Código:
' Gambas class file

Public Sub Button1_Click()

  Dim i As Integer
  Dim c As Object

  i = Rand(1, 5)

  For Each c In Me.Children
    If Object.Type(c) = "Label" Then
      If c.Name = "lbl" & Format(i, "00") Then
        c.visible = True
        c.Text = Format(i, "00")
        Button1.Text = Format(i, "00")
      Else
        c.visible = False
      Endif
    Endif
  Next
End
Saludos.


RE: Cambiar propiedad de un control en tiempo de ejecución - vuott - 15-08-2020

(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().