Programación General > Visual Basic 6.0 e inferiores

 Manejo de los Objetos en un formulario

(1/1)

schumacher:
Hola, se me presento la siguiente interrogante
como haría para seleccionar todos los objetos de un determinado tipo, y cambiarles alguna propiedad (tamaño, ubicación,...)
se que es algo no tan complicado pero no se con que palabra buscarlo

Saludos!  B)
Gracias por adelantado

Nebire:
Cada formulario mantiene una colección de los controles que en él contiene, esto es accesible a través de la propiedad 'controls'.
Adicionalmente podemos filtrar para operar sólo sobre determinados contenedores. Te incluyo en el código de ejmplo una forma de operar de esta manera....


En un nuevo proyecto:
1 Coloca varios textbox en un formulario,
2  coloca 2 picturebox en el formulario y mete en ellos también algunos textbox
3 coloca 1 botón
4 añade otros diferentes controles entre ellos un  Timer... (lo usamos en el ejemplo).
5 cambia a los textbox, el fondo de diferentes colores
6 luego copia y pega esté código y ejecútalo...

--- Código: Visual Basic --- Public Enum DondeSeaplica    APLICAR_SOLO_AL_CONTENEDOR_PASADO = 1    APLICAR_EXCLUIR_EL_CONTENDEOR_PASADO = 2    APLICAR_A_TODOS = APLICAR_SOLO_AL_CONTENEDOR_PASADO + APLICAR_EXCLUIR_EL_CONTENDEOR_PASADO ' 3End Enum Private Sub Command1_Click()    Call CambiarFondoControl(135790, "TextBox", APLICAR_EXCLUIR_EL_CONTENDEOR_PASADO, Picture1)    MsgBox "deben haberse pintado todos los textbox EXCEPTO los contenidos en el picture1 de color rojo pardo"        Call CambiarFondoControl(246802, "TextBox", APLICAR_SOLO_AL_CONTENEDOR_PASADO, Picture2)    MsgBox "deben haberse pintado SOLO los textbox contenidos en el picture2 de color verde fuerte"     Call CambiarFondoControl(7654321, "TextBox", APLICAR_A_TODOS)    MsgBox "deben haberse pintado TODOS los textbox contenidos en el picture2 de color verde macilento"    Call CambiarFondoTextBox(7654321, "Timer", APLICAR_A_TODOS) ' <------- OJO: aquí debe dar errorEnd Sub ' Nota: se da por supuesto que operamos con un formulario llamado  form1...Private Sub CambiarFondoControl(ByVal nuevoColor As Long, ByVal Tipo As String, ByVal Aplicar As DondeSeaplica, Optional ByRef Contenedor As Object)    Dim ct As Control     If Tipo <> "" Then        On Local Error GoTo NoContenedor                If Contenedor Is Nothing Then Set Contenedor = Form1  ' <-------- OJO: hemos puesto Form1                Select Case Aplicar            Case DondeSeaplica.APLICAR_SOLO_AL_CONTENEDOR_PASADO                For Each ct In Form1.Controls  ' nótese que debe ser un formulario...                    If TypeName(ct) = Tipo Then                        If ct.Container.Name = Contenedor.Name Then                            ct.BackColor = nuevoColor                        End If                    End If                Next            Case DondeSeaplica.APLICAR_EXCLUIR_EL_CONTENDEOR_PASADO                For Each ct In Form1.Controls  ' nótese que debe ser un formulario...                    If TypeName(ct) = Tipo Then                        If ct.Container.Name <> Contenedor.Name Then                            ct.BackColor = nuevoColor                        End If                    End If                Next            Case DondeSeaplica.APLICAR_A_TODOS                For Each ct In Form1.Controls  ' nótese que debe ser un formulario...                    If TypeName(ct) = Tipo Then                        ct.BackColor = nuevoColor                    End If                Next            Case Else                MsgBox "No existe una correspondencia con el valor: " & CStr(Aplicar) & " para la variable 'Aplicar'"        End Select    End If    Exit SubNoContenedor:   If Err.Number = 438 Then        MsgBox "Ocurrió un error. El control " & Tipo & " no tiene una propiedad 'backcolor'", vbCritical, "Error al CambiarFondoControl"    Else        MsgBox "Ocurrió un error." & vbCrLf & Err.Description, vbCritical, "Error al CambiarFondoControl"    End IfEnd Sub  
Recuerda meter correctamente el nombre del tipo de control y para el caso de mayúsuclas minúsculas...
Si un control no tiene la propiedad del ejemplo (backcolor) se indica expresamente, por ejemplo la última llamada trata de cambiar el backcolor a un timer, pero este no tiene tal propiedad.

El ejemplo sirve tanto para seleccionar todos los controles de un determinado tipo como para seleccionar todos los controles que pertenecen/no pertenecen a un mismo  contenedor...

schumacher:
hey gracias estaré probando el codigo, pero segun lo veo me servirá bastante!  :good:

Saludos!

EDITADO:  :beer: Listo! funciono! gracias por la ayuda!  :good:

Navegación

[0] Índice de Mensajes

Ir a la versión completa