Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Sintaxis para un bucle

Estas en el tema de Sintaxis para un bucle en el foro de Visual Basic clásico en Foros del Web. Hola saludos. La problemática es sencilla; tengo 100 o quizá 1000 etiquetas las cuales quisiera hacer invisibles o visibles con un simple bucle. Cómo sería ...
  #1 (permalink)  
Antiguo 30/10/2009, 11:36
Avatar de Kottore  
Fecha de Ingreso: octubre-2007
Mensajes: 170
Antigüedad: 16 años, 7 meses
Puntos: 8
Sintaxis para un bucle

Hola saludos.
La problemática es sencilla; tengo 100 o quizá 1000 etiquetas las cuales quisiera hacer invisibles o visibles con un simple bucle. Cómo sería la sintáxis en Visual Basic???
Hacer algo así sería muy engorroso:

label1.visible =false
label2.visible =false
label3.visible=false
...

En ActionScript lo haría así:

for(k=0;k<100;k++){
this["label"+k]._visible=false;
}


De antemano muchas gracias por sus respuestas.
  #2 (permalink)  
Antiguo 30/10/2009, 13:03
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Sintaxis para un bucle

Puedes indexar los Labels, y usar el índice:
Código vb:
Ver original
  1. For I = 0 To Label1.Count - 1
  2.     Label1(I).Visible = False
  3. Next I
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 30/10/2009, 13:14
 
Fecha de Ingreso: enero-2007
Ubicación: 9 de julio
Mensajes: 111
Antigüedad: 17 años, 3 meses
Puntos: 2
Respuesta: Sintaxis para un bucle

Hola, otra alternativa es

Código:
Dim ctl As Object
For Each ctl In Me.Controls
   If TypeOf ctl Is Label Then
       ctl.Visible = True
   End If
Next
Espero te sirva
  #4 (permalink)  
Antiguo 30/10/2009, 13:31
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
Respuesta: Sintaxis para un bucle

Cita:
Iniciado por pana99 Ver Mensaje
Hola, otra alternativa es

Código:
Dim ctl As Object
For Each ctl In Me.Controls
   If TypeOf ctl Is Label Then
       ctl.Visible = True
   End If
Next
Espero te sirva
Excepto que eso afectaria a todas las label, que posiblemente sean mas aparte de las label1,label2,... labelx que menciona.
  #5 (permalink)  
Antiguo 30/10/2009, 13:38
 
Fecha de Ingreso: enero-2007
Ubicación: 9 de julio
Mensajes: 111
Antigüedad: 17 años, 3 meses
Puntos: 2
Respuesta: Sintaxis para un bucle

si, es como decis.

Esto afecta a todos los labels.
Se podria aprovechar si no tenes los lables como matrix. Y si te afecta alguna que necestias, al final podes correjir su estado

Si las tenes como matriz, es mejor la solucion de David
  #6 (permalink)  
Antiguo 30/10/2009, 15:24
Avatar de Kottore  
Fecha de Ingreso: octubre-2007
Mensajes: 170
Antigüedad: 16 años, 7 meses
Puntos: 8
Respuesta: Sintaxis para un bucle

Genial genial!!!

Muchísimas gracias por todas las respuestas.
Ara mismo me dio resultado pero no puedo aplicarlo en una función :(


Private Sub Boton1_Click()
fncPrueba (1) 'Acá puede ir desde el 0 al 99
End Sub

Private Sub fncPrueba(varOpc)
label(varOpc).visible = False
End Sub

Alguna idea??
  #7 (permalink)  
Antiguo 30/10/2009, 15:47
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Sintaxis para un bucle

Creo que te ha faltado el 1.
Ya que no se ha puesto "Visible" con mayuscula creo que tu label se llama Label1

Código :
Ver original
  1. Private Sub fncPrueba(varOpc)
  2.   label1(varOpc).visible = False
  3. End Sub
  #8 (permalink)  
Antiguo 30/10/2009, 16:26
Avatar de Kottore  
Fecha de Ingreso: octubre-2007
Mensajes: 170
Antigüedad: 16 años, 7 meses
Puntos: 8
Respuesta: Sintaxis para un bucle

Cita:
Iniciado por pkj Ver Mensaje
Creo que te ha faltado el 1.
Ya que no se ha puesto "Visible" con mayuscula creo que tu label se llama Label1

Código :
Ver original
  1. Private Sub fncPrueba(varOpc)
  2.   label1(varOpc).visible = False
  3. End Sub
Ah, perdón. Se me olvidó decir que tengo:

label1
label2
...
label99

y la idea es que se lance una función con determinado label a modificar así:


Private Sub Boton1_Click()
fncPrueba (1) 'Acá puede ir desde el 0 al 99
End Sub

Private Sub fncPrueba(varOpc)
label1(varOpc).visible = False
End Sub

pero este método no va.

Alguna otra idea por favor?

Última edición por Kottore; 30/10/2009 a las 16:51
  #9 (permalink)  
Antiguo 30/10/2009, 17:24
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Sintaxis para un bucle

Si lo dijiste, el caso es que pensaba que ya habias creado la matriz de labels como te han comentado anteriormente.

Si eliminar todos los labels y crear una matriz es mucho trabajo porque cada label tiene un caption diferente y son muchas, tienes otra opcion:

Código :
Ver original
  1. Dim F As Integer
  2. For F = 0 To Controls.Count -1
  3.   If Left$(Controls(f).Name, 5) = "Label" Then
  4.     Controls(F).Visible = False
  5.   End If
  6. Next F

PD:
Puedes usarlo en una sub como la que has mostrado para ocultar un label por su numero si pones:

Código :
Ver original
  1. Private Sub fncPrueba(varOpc)
  2. Dim F As Integer
  3. For F = 0 To Controls.Count -1
  4.   If Controls(F).Name = "Label" & varOpc Then
  5.     Controls(F).Visible = False
  6.   End If
  7. Next F
  8. End Sub

Última edición por pkj; 30/10/2009 a las 17:34
  #10 (permalink)  
Antiguo 03/11/2009, 00:01
Avatar de Kottore  
Fecha de Ingreso: octubre-2007
Mensajes: 170
Antigüedad: 16 años, 7 meses
Puntos: 8
Respuesta: Sintaxis para un bucle

Perfecto!!
El este código va a la perfección!!! :


Código:
  Private Sub fncPrueba(varOpc)
      Dim F As Integer
      For F = 0 To Controls.Count -1
         If Controls(F).Name = "Label" & varOpc Then
          Controls(F).Visible = False
        End If
      Next F
  End Sub
Muchas gracias por la ayuda!
Todo va bien bien. Por aquí seguiré reportandome para cualquier cosa. Saludos
  #11 (permalink)  
Antiguo 03/11/2009, 09:00
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Sintaxis para un bucle

Una alternativa a recorrer todos los controles es usar CallByName:
Código vb:
Ver original
  1. Private Sub fncPrueba(varOpc As Integer)
  2.     CallByName(Me, "Label" & varOpc, vbGet).Visible = False
  3. End Sub
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:27.