Hola, estaba haciendo una función para poder descargar controles de forma automatizada pero al parecer no me resultó muy bien:
Supongamos que tengo el control text(index) y le hize load por cada item que necesitaba cargar y no precisamente en un orden numérico por lo tanto cuando quiera descargarlos despues no podría utilizar for id = 0 to text.count - 1 sino que tendría que utilizar un for each control in text pero lo hago en varios controles asi que me puse a hacer esta función:
Public Function Descarga_controles(Controles As Controls) As Boolean
Dim Control_item As Control
' Comrpueba que hay mas de un control o sea por lo menos uno cargado
If Controles.Count > 1 Then
' Cuenta cada control cargado
For Each Control_item In Controles
' Omite el control padre porque no puede ser eliminado
If Control_item.Index > 0 Then
Call Unload(Control_item)
End If
Next Control_item
Descarga_controles = True
Else
' No se descargaron los controles ya que no se encontró ninguno
Descarga_controles = False
End If
End Function
después lo pasé por:
Call Descarga_controles(Check_visual) ' test
MsgBox Check_visual.Count
'If Check_visual.Count > 1 Then
' For Cuenta = 1 To Check_visual.Count - 1
' Unload Check_visual(Cuenta)
' Next Cuenta
'End If
para poder testear y me lanzó error porque e grupo de controles checkbox no era de tipo controls.
Supuse que controls se referiría a controles varios indexados pero me equiboqué, tampoco puedo decirle controles as checkbox porque tambien necesito procesar textbox e image, etc y no es uno sino varios.
Como podría hacerlo en este caso?
Bueni, ahi me funcionó:
Public Function Descarga_controles(Controles) As Boolean
Dim Control_item As Control
' Comrpueba que hay mas de un control o sea por lo menos uno cargado
If Controles.Count > 1 Then
' Cuenta cada control cargado
For Each Control_item In Controles
' Omite el control padre porque no puede ser eliminado
If Control_item.Index > 0 Then
Call Unload(Control_item)
End If
Next Control_item
Descarga_controles = True
Else
' No se descargaron los controles ya que no se encontró ninguno
Descarga_controles = False
End If
End Function
Pero tube que quitarle la declaración del tipo de variable a recibir, no hay alguna forma de si ponerle el tipo para que no pueda aceptar otra cosa que no sean controles?
Hola, dentro del For Each deberias chequear que sea del tipo de control que vos queres asi no pasa por todos...con TypeOf()..algo asi:
Dim vControl As Control
For Each vControl In Me.Controls
If TypeOf vControl Is CheckBox Then
'aca el codigo
End If
Next
saludos.
genial, no lo conocía, gracias.