Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: WHK en 11 Octubre 2009, 01:22 am



Título: Descargar todos los controles indexados
Publicado por: WHK en 11 Octubre 2009, 01:22 am
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:

Código
  1. Public Function Descarga_controles(Controles As Controls) As Boolean
  2. Dim Control_item As Control
  3. ' Comrpueba que hay mas de un control o sea por lo menos uno cargado
  4. If Controles.Count > 1 Then
  5.  ' Cuenta cada control cargado
  6.  For Each Control_item In Controles
  7.   ' Omite el control padre porque no puede ser eliminado
  8.   If Control_item.Index > 0 Then
  9.    Call Unload(Control_item)
  10.   End If
  11.  Next Control_item
  12.  Descarga_controles = True
  13. Else
  14.  ' No se descargaron los controles ya que no se encontró ninguno
  15.  Descarga_controles = False
  16. End If
  17. End Function
  18.  

después lo pasé por:
Código
  1. Call Descarga_controles(Check_visual) ' test
  2. MsgBox Check_visual.Count
  3. 'If Check_visual.Count > 1 Then
  4. ' For Cuenta = 1 To Check_visual.Count - 1
  5. '  Unload Check_visual(Cuenta)
  6. ' Next Cuenta
  7. '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?


Título: Re: Descargar todos los controles indexados
Publicado por: WHK en 11 Octubre 2009, 01:29 am
Bueni, ahi me funcionó:
Código
  1. Public Function Descarga_controles(Controles) As Boolean
  2. Dim Control_item As Control
  3. ' Comrpueba que hay mas de un control o sea por lo menos uno cargado
  4. If Controles.Count > 1 Then
  5.  ' Cuenta cada control cargado
  6.  For Each Control_item In Controles
  7.   ' Omite el control padre porque no puede ser eliminado
  8.   If Control_item.Index > 0 Then
  9.    Call Unload(Control_item)
  10.   End If
  11.  Next Control_item
  12.  Descarga_controles = True
  13. Else
  14.  ' No se descargaron los controles ya que no se encontró ninguno
  15.  Descarga_controles = False
  16. End If
  17. End Function
  18.  

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?


Título: Re: Descargar todos los controles indexados
Publicado por: seba123neo en 11 Octubre 2009, 01:36 am
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:

Código
  1.    Dim vControl As Control
  2.  
  3.    For Each vControl In Me.Controls
  4.        If TypeOf vControl Is CheckBox Then
  5.           'aca el codigo
  6.        End If
  7.    Next

saludos.


Título: Re: Descargar todos los controles indexados
Publicado por: WHK en 11 Octubre 2009, 02:32 am
genial, no lo conocía, gracias.