calcena   15-08-2020, 17:34
#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.
Última modificación: 16-08-2020, 11:50 por calcena.
vuott   15-08-2020, 18:18
#2
...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.
Última modificación: 15-08-2020, 18:33 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
calcena   15-08-2020, 18:46
#3
(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.
tincho   15-08-2020, 19:25
#4
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.
Archivos adjuntos
.gz
ejemplo-me-controls-0.0.1.tar.gz (Tamaño: 11.7 KB Descargas: 0)

1 Saludo.
vuott   15-08-2020, 20:25
#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().
Última modificación: 15-08-2020, 20:30 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
  
Usuarios navegando en este tema: 3 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.